Nginx
Nginx 自動為重定向添加萬用字元
我正在使用 nginx 進行一些重定向,但對於某些重定向,它會自動匹配 URL 末尾的所有內容,從而創建到錯誤頁面的重定向。
我有這兩個重定向。
location /en/blogging { return 301 /en/blog; } location ~^/en/blogging/(?<suffix>.*)$ { return 301 /en; }
問題是第一個似乎自動將萬用字元添加到重定向中。
目前的結果:
/ zh / 寫部落格
/ zh / 寫部落格 / 測試
/ zh / bloggingtest
全部重定向到
/zh/部落格
預期結果:
/en/部落格 -> /en/部落格
/en/blogging/test -> /en
/en/bloggingtest -> 無重定向
為什麼會發生這種情況,我該如何避免?
您正在使用which 匹配以 .開頭的
location /en/blogging
任何 URI 。如果要匹配單個 URI,則應使用。/en/blogging``location = /en/blogging``/en/blogging
該語句
location ~^/en/blogging/(?<suffix>.*)$
將匹配任何以 - 開頭的 URI,/en/blogging/
但隨後也會匹配location /en/blogging/
,但不會增加正則表達式的複雜性,也不會捕穫後綴。例如:
location = /en/blogging { return 301 /en/blog; } location ^~ /en/blogging/ { return 301 /en; }
修改器
^~
可能需要更改前綴位置的優先級,特別是如果您在同server
一塊中有其他衝突的正則表達式位置。有關詳細資訊,請參閱此文件。