Actually, the cache module is not handling slash ending url and it's impossible with any directive do cache this kind or url.
When i send this problem on the mailing few weeks ago, i read on mail answer that was maybe because it could happen problem with negociation and caching slash ending url.
I wrote a little directive: CacheSlashEndingUrl On/Off which is per default at Off, to cache slash ending url.
i dunno if it can be usefull but i send you the patch.
About the negociations, on all website i tested on, there is store and no-cache headers which make the url non cachable.
regards,
Estrade Matthieu
? patch.cache
? patch.slash.cache
Index: mod_cache.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/experimental/mod_cache.c,v
retrieving revision 1.62
diff -u -r1.62 mod_cache.c
--- mod_cache.c 6 Nov 2002 14:08:31 -0000 1.62
+++ mod_cache.c 18 Nov 2002 10:13:20 -0000
@@ -124,10 +124,6 @@
"cache: URL exceeds length threshold: %s", url);
return DECLINED;
}
- /* DECLINE urls ending in / ??? EGP: why? */
- if (url[urllen-1] == '/') {
- return DECLINED;
- }
/* make space for the per request config */
cache = (cache_request_rec *) ap_get_module_config(r->request_config,
@@ -137,6 +133,12 @@
ap_set_module_config(r->request_config, &cache_module, cache);
}
+ if (conf->cache_slash_endingurl == 0) {
+ if (url[urllen-1] == '/') {
+ return DECLINED;
+ }
+ }
+
/* save away the type */
cache->types = types;
@@ -912,6 +914,8 @@
ps->ignorecachecontrol = 0;
ps->ignorecachecontrol_set = 0 ;
ps->max_streaming_buffer_size = 0;
+ ps->cache_slash_endingurl = 0;
+ ps->cache_slash_endingurl_set = 0;
return ps;
}
@@ -953,6 +957,11 @@
? base->max_streaming_buffer_size
: overrides->max_streaming_buffer_size;
+ ps->cache_slash_endingurl =
+ (overrides->cache_slash_endingurl_set == 0)
+ ? base->cache_slash_endingurl
+ : overrides->cache_slash_endingurl;
+
return ps;
}
static const char *set_cache_ignore_no_last_mod(cmd_parms *parms, void *dummy,
@@ -1090,6 +1099,20 @@
return NULL;
}
+static const char *set_cache_slash_endingurl(cmd_parms *parms, void *dummy,
+ int flag)
+{
+ cache_server_conf *conf;
+
+ conf =
+ (cache_server_conf *)ap_get_module_config(parms->server->module_config,
+ &cache_module);
+ conf->cache_slash_endingurl = flag;
+ conf->cache_slash_endingurl_set = 1;
+ return NULL;
+
+}
+
static int cache_post_config(apr_pool_t *p, apr_pool_t *plog,
apr_pool_t *ptemp, server_rec *s)
{
@@ -1140,6 +1163,10 @@
RSRC_CONF,
"Maximum number of bytes of content to buffer for "
"a streamed response"),
+ AP_INIT_FLAG("CacheSlashEndingUrl", set_cache_slash_endingurl,
+ NULL,
+ RSRC_CONF,
+ "Enabling cache on Slash ending Url"),
{NULL}
};
Index: mod_cache.h
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/experimental/mod_cache.h,v
retrieving revision 1.36
diff -u -r1.36 mod_cache.h
--- mod_cache.h 17 Nov 2002 01:33:25 -0000 1.36
+++ mod_cache.h 18 Nov 2002 10:13:20 -0000
@@ -179,6 +179,9 @@
/** ignore client's requests for uncached responses */
int ignorecachecontrol;
int ignorecachecontrol_set;
+ /* enable/disable cache on slash ending url */
+ int cache_slash_endingurl;
+ int cache_slash_endingurl_set;
/* maximum amount of data to buffer on a streamed response where
* we haven't yet seen EOS */
apr_off_t max_streaming_buffer_size;
