Olivier Pons
Olivier Pons

Reputation: 15778

Apache: ExpiresDefault doesn't work, whereas "Header" does. How comes?

If I do this:

<IfModule mod_expires.c>
  <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4|css|js|php)$">
    ExpiresActive On
    ExpiresDefault "access plus 30 days"
  </FilesMatch>
</IfModule>

It doesn't set properly the Expire header, whereas if I "force" it by hand like this:

<IfModule mod_expires.c>
  <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4|css|js|php)$">
    ExpiresActive On
    Header set Expires "Thu, 18 Jan 2012 20:00:00 GMT"
  </FilesMatch>
</IfModule>

It works. This implies 2 things:

What am I missing?

By the way: if you have any solution to make it work I'm your man!

Upvotes: 4

Views: 4675

Answers (2)

Olivier Pons
Olivier Pons

Reputation: 15778

Ok I've got it from the official documentation here:

Note that if you use a modification date based setting, the Expires header will not be added to content that does not come from a file on disk. This is due to the fact that there is no modification time for such content.

So it works only for static files, and not for all the other ones: they're not static.

Upvotes: 4

TerryE
TerryE

Reputation: 10888

This one got me stumped as well because AFAIK, it should work so I tried it on a test VM varying the N days and refreshing. Works fine for me. My Apache version is

Server version: Apache/2.2.14 (Ubuntu)
Server built:   Nov 18 2010 21:17:19

Any the headers for a test file (using chrome developer tools) (with N=15) show:

Date:Mon, 09 Jan 2012 01:48:43 GMT
ETag:"7574-5-4b60e88a820a1"
Expires:Tue, 24 Jan 2012 01:48:43 GMT

My thought is that any ExpiresDefault can be overridden by a Header set Expires. Have you grepped the .htaccess hierarchy to make sure that your ExpiresDefault isn't being overridden at a lower level.

If you don't want htaccess files doing this you need to disable them in your http config.

Upvotes: 0

Related Questions