В качестве примера возьмем эту конфигурацию местоположения 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";
}
}
Вы можете использовать что-то вроде этого.
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, вызывается другой блок местоположения.