Расположение Nginx соответствует нескольким расширениям, если путь не начинается с определенного слова

Как я могу написать блок местоположения, который соответствует любому пути, заканчивающемуся следующими расширениями:

jpg|jpeg|gif|css|png|js|ico|json|xml|txt|html

Если путь не начинается с «/rails» (например: /rails/randomstring/image.png)?

В настоящее время у меня есть этот базовый блок:

location ~* \.(jpg|jpeg|gif|css|png|js|ico|json|xml|txt|html)$ {
  gzip_static on;
  gzip on;
  expires max;
  add_header Cache-Control public;
}

Но это будет соответствовать «/rails/randomstring/image.png», а я этого не хочу.


person Felipe Zavan    schedule 17.12.2018    source источник
comment
Дубликат serverfault.com/questions /816998/   -  person muradm    schedule 17.12.2018


Ответы (1)


Вы можете привязать отрицательный просмотр к началу строки:

^(?!\/rails).*(?:jpg|jpeg|gif|css|png|js|ico|json|xml|txt|html)

Демо

person Tim    schedule 17.12.2018
comment
Раньше я пробовал негативный просмотр вперед, но, должно быть, я сделал что-то не так, этот работает отлично. Благодарю вас! - person Felipe Zavan; 17.12.2018