以此 Nginx 位置配置为例:
location ~* \.(gif|jpg|jpeg|swf|css)$ {
add_header Cache-Control "max-age=259200, public";
}
location ^~ /abc/ {
try_files $uri /abc/generic.png;
}
对于请求 /abc/x.jpg,它将匹配第二个位置,并且响应将不包含 Cache-Control 标头。如何才能将 Cache-Control 标头也应用于 /abc/x.jpg?
类似这样的方法可以工作,但有点重复。
location ~* \.(gif|jpg|jpeg|swf|css)$ {
add_header Cache-Control "max-age=259200, public";
}
location ^~ /abc/ {
try_files $uri /abc/generic.png;
location ~* \.(gif|jpg|jpeg|swf|css)$ {
add_header Cache-Control "max-age=259200, public";
}
}
答案1
您可以使用类似这样的东西。
location ~* \.(gif|jpg|jpeg|swf|css)$ {
add_header Cache-Control "max-age=259200, public";
}
location /abc {
try_files $uri /abc/generic.png;
}
在 Nginx 中,优先级如下:首先是 = (相等),然后是 ^~ (无正则表达式),然后是 ~ (区分大小写),然后是 ~* (不区分大小写),然后是无。由于代码已更改为 /abc,其优先级降至最低,因此当找到以给定图像扩展名结尾的 URI 时,将首先调用第一个位置块。如果没有找到,并且如果 URI 包含 /abc 阻止诸如 /abc/file/file.pdf、/abc/file.pdf 之类的内容,则会调用另一个位置块。