You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Brian Akins <ba...@web.turner.com> on 2003/03/24 16:49:04 UTC

mod_expires and mod_dir problem

I have had the problem in all versions of apache 2 that the following
does not work as expected:

ExpiresActive On
ExpiresByType text/html A120

A request for http://host.domain.com/index.html has the correct Expires
header added, but a request for http://host.domain.com/ does not.



I determined that mod_expires always ran before mod_dir, so mod_expires
never matched the content-type.  My solution was to change the following
in mod_expires.c:

-    ap_hook_fixups(add_expires,NULL,NULL,APR_HOOK_MIDDLE);
+    ap_hook_fixups(add_expires,NULL,NULL,APR_HOOK_REALLY_LAST);


This fixes my particular issue and does not seem to break anything else.
 Can others confirm this?

Thanks.

Brian Akins
CNN Internet Technologies

Re: mod_expires and mod_dir problem

Posted by Greg Ames <gr...@apache.org>.
Brian Akins wrote:
> I have had the problem in all versions of apache 2 that the following
> does not work as expected:
> 
> ExpiresActive On
> ExpiresByType text/html A120
> 
> A request for http://host.domain.com/index.html has the correct Expires
> header added, but a request for http://host.domain.com/ does not.
> 
> 
> 
> I determined that mod_expires always ran before mod_dir, so mod_expires
> never matched the content-type.  My solution was to change the following
> in mod_expires.c:
> 
> -    ap_hook_fixups(add_expires,NULL,NULL,APR_HOOK_MIDDLE);
> +    ap_hook_fixups(add_expires,NULL,NULL,APR_HOOK_REALLY_LAST);
> 
> 
> This fixes my particular issue and does not seem to break anything else.
>  Can others confirm this?

This patch is an improvement, but the problem goes further.  Try setting a 
non-default ContentType in a CGI.  ExpiresByType won't work as you might expect. 
  Why not?  The CGI creates the ContentType header during the handler phase, 
after all the fixups.

I've had this reported as a loss of function between 1.3 and 2.0, but I don't 
think it really is.  In 1.3, the default ContentType seems to take effect 
earlier.  So if your ExpiresByType happens to match the default, it appears to 
work in 1.3.

The good news for 2.x: mod_expires' fixup routine could be split in two, with 
the code that looks at the type running as a one-shot output filter, after the 
header filter.  I don't know of a clean way to fix it in 1.3.

Greg