Help getting regexp to match to set expires headers
Maxim Dounin
mdounin at mdounin.ru
Sun Feb 7 05:44:01 MSK 2010
Hello!
On Sat, Feb 06, 2010 at 05:51:12PM -0800, Tim Wong wrote:
> Hi there,
>
> I'm trying to get nginx to set expires headers only for assets that have
> timestamps at the end of them but am having trouble figuring out exactly
> what to put in the conf file. Would anybody be able to help me out?
>
> Here's what I've tried:
>
> # Trying to set expires headers for /test.png?1265332681 but not for /test.png
>
> # Works for /test.png?1265332681 but also matches /test.png
> location ~* \.(htc|ico|css|js|gif|jp?g|png)(\?[0-9]+)?$ {
Location match on path only, without query string, so this won't
work.
Just a side note: probably you mean "...|jpe?g|..."?
> expires max;
> break;
Another side note: using "break" is pointless here, it just wastes
CPU cycles.
> }
>
> # No expires headers set
> location ~* \.(ico|css|js|gif|jp?g|png)(\?[0-9]+)$ {
> expires max;
> break;
> }
Try this instead:
location ~* \.(ico|css|js|gif|jpe?g|png)$ {
if ($args) {
expires max;
}
}
Note well: this will work, but you may find it doing strange
things once you add more directives into the above location, see
http://wiki.nginx.org/IfIsEvil for details.
Most generic solution is to use something like this:
location ~* \.(ico|css|js|gif|jpe?g|png)$ {
error_page 405 = @expiresmax;
recursive_error_pages on;
if ($args) {
return 405;
}
...
}
location @expiresmax {
expires max;
}
Maxim Dounin
More information about the nginx
mailing list