We want to be able to set Cache-Control headers based on User-Agent in Apache

For example, if a User-Agent contains substring foo we want to set Cache-Control to 10 minutes. But if not set it to 1 day.

Searching around, I've found BrowserMatch, but that seems to only set environment variables:

BrowserMatch foo short-live  # Sets environment variable short-live

But I would like to conditionally apply a directive like Header set ... or ExpiresDefault ...

Is there a way to conditionally apply declarations? Something like:

<FilesMatch "\.(jpg|jpeg|gif|png|js|css)$">
  Header set Cache-control "max-age=86400"
  <IfBrowser "foo">
    Header set Cache-control "max-age=600"
  </IfBrowser>
</FilesMatch>

Note, IfBrowser is fictional. Is there any real directive that could be used like this? Thanks!

PS This is reposted from http://stackoverflow.com/questions/5708090/contional-declaration-in-apache-httpd since that has received little activity.

link|improve this question
feedback

1 Answer

up vote 1 down vote accepted

UPDATED - yes the previous code was no good. However, this might set you in the right direction:

Header set Cache-control "max-age=86400"

SetEnvIfNoCase User-Agent libwww short-cache
Header set Cache-control "max-age=600" env=short-cache

I've actually tested this, it appears to work.

link|improve this answer
No, this will not work, BrowserMatch does not work that way, I'm looking for another selector. Updating question. – sligocki Apr 19 '11 at 19:57
Just curious if the above worked for you or not. – muffinista Apr 20 '11 at 18:13
Great, that's exactly what I was looking for. Thanks! – sligocki Apr 21 '11 at 15:06
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.