Expires Headers with Rails

Hi guys,

I have been trying numerous methods to get expires headers to work with apache and rails. I'm on a debian ubuntu server with:

sudo a2enmod rewrite expires headers deflate

.. all on ..

I'm using something similar in my Virtual site under the directory block:

# gzip html, css and js AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript

# far future expires headers ExpiresActive On <FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)?d{10}$"> ExpiresDefault "access plus 10 years" </FilesMatch>

I'm not using 10 years though, this is just an example script. I also tried:

  # add something we can do a directory match on   RewriteCond %{QUERY_STRING} ^[0-9]{10}$   RewriteRule ^(.*)$ /add_expires_header%{REQUEST_URI} [QSA]

  # the add_expires_header directory is just a symlink to public   <Directory "/path/to/rails_app/public/add_expires_header">     ExpiresActive On     ExpiresDefault "access plus 10 years"   </Directory>

and added the symlink for :

cd /path/to/rails_app/public ln -s . add_expires_header

The problems I face are the following:

I want to use expire headers with all of the following content:

ico>pdf>flv>jpg>jpeg>png>gif>js>css>swf

I also want the expire headers to work with images being loaded from CSS files. Rails puts the datetime stamp on all of my content so it should work with the ?datetimestamps too.

I'm sure someone here has setup something that works well. I could use some help to get this working. In my case, sometimes the rails ?timestamps are ignored and YSlow shows the content not being expired...

Thanks.

I decided to wait 24 hours before rebumping my thread. I still could use some assistance with this. I'm not sure how many out there use expire headers but I would like to accomplish this task with rails.

Please look over my former response and if you have expires headers working with your site, I could use some pointers for mine.

Many thanks.

Hi guys,

I have been trying numerous methods to get expires headers to work with apache and rails. I'm on a debian ubuntu server with:

sudo a2enmod rewrite expires headers deflate

.. all on ..

I'm using something similar in my Virtual site under the directory block:

# gzip html, css and js AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript

# far future expires headers ExpiresActive On <FilesMatch ".(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)?d{10}$">

Don't think that will actually match your files because... - the d is missing a \ - the ? will be interpreter as a quantifier not a literal ?

Also you probably want the . to be literal dot, but that won't prevent it matching

You could check all this be looking at what expires headers are actually being generated.

Fred

Hi Fred,

So far, the only things being expired are the following:

All .css All .js All images served by rails that don't contain _ underscores or - hyphens.

If an image served by rails is for instance my_image.gif?(timestamp) or my-image.gif?(timestamp) - those are not being expired.

In addition, any image content served from my css files:

background-image: url(/images/background_defense.jpg);

Well those don't have a timestamp on them so don't match your filesmatch clause. Have you tried fiddling with the regular expression (or using ExpiresByType) ?

Fred

Fred, good call mate.

ExpiresDefault worked great for css, js, and swf ExpiresBytype worked great for all images, including those within css

I pushed the expires to access plus 4 months since that's the football season length and if any site modifications occur, they'll happen after that time.

My site now grades out as an A in Expire Headers with YSlow.

Overall, my entire site grades out as a B with YSlow, almost at an A. It's pretty speedy too.

Take care,

Alpha Blue wrote: [...]

My site now grades out as an A in Expire Headers with YSlow.

Overall, my entire site grades out as a B with YSlow, almost at an A. It's pretty speedy too.

Don't put too much faith in YSlow. Remember that it was designed to be an internal tool at Yahoo!. That means that it's great if you're Yahoo! or if you have similar usage patterns, but if you don't, it can be very misleading. For example, on my projects, I've found most components of it nearly useless.

Take care,

Best,