Nginx 位置匹配多个扩展名,除非路径以特定单词开头

Nginx location match multiple extensions unless path starts with specific word

如何编写一个位置块来匹配以以下扩展名结尾的任何路径:

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”,我不想要那个。

您可以将否定前瞻锚定到字符串的开头:

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

Demo