Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Header Expires not working

Tags:

header

apache2

In httpd.conf the last lines are:

ExpiresActive On
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
    ExpiresDefault "access plus 3 days"
</FilesMatch>

When I run YSlow it says all my CSS files (and others) do not have expiration set. The CSS files are in subdirectories but I believe "\." should match all files regardless of subdirectory.

Apache is set up for virtual hosts, but the above directives are outside of vhosts section at the very bottom of httpd.conf.

There is a directive for LoadModule expires_module modules/mod_expires.so in the .conf file.

The site is on AWS running AWS Linux and Apache2. I restarted apache before checking if it worked.

like image 486
Jim Avatar asked May 30 '12 12:05

Jim


1 Answers

In answer to your question, this works for me in my httpd.conf:

LoadModule expires_module /usr/lib/apache2/modules/mod_expires.so
ExpiresActive On

<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
ExpiresDefault "access plus 3 days"
</filesMatch>

Here are a few things to try:

1) Make sure mod_expires.so is where you think it is. You can see what modules are being included by using this in your terminal: apache2 -M.

2) Make sure your directives apply to the files you're interested in (i.e. not getting overwritten by a .htaccess file somewhere farther down the line)

3) Make sure the LoadModule directive is in your httpd.conf file

4) In your FilesMatch regex, you should escape the dot with a backslash otherwise you're matching any character. Not a big issue, but you'd end up applying the rule to non-static pages like "site.com/politico" (note the ico ending) for example.

like image 150
pieman72 Avatar answered Nov 18 '22 01:11

pieman72