Nginx
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”,我不希望這樣。
您可以使用
location ^~
定義,例如:location ^~ /rails/ { # your directives for "/rails/..." URIs here } location ~* \.(jpg|jpeg|gif|css|png|js|ico|json|xml|txt|html)$ { gzip_static on; gzip on; expires max; add_header Cache-Control public; }
根據文件:
如果最長匹配前綴位置具有“^~”修飾符,則不檢查正則表達式。
更新
在不聲明額外塊的情況下執行此操作的另一種方法
location
是使用負正則表達式斷言:location ~ ^(?!/rails/).*\.(jpg|jpeg|gif|css|png|js|ico|json|xml|txt|html)$ { gzip_static on; gzip on; expires max; add_header Cache-Control public; }