Nginx

Nginx 自動為重定向添加萬用字元

  • May 16, 2019

我正在使用 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一塊中有其他衝突的正則表達式位置。有關詳細資訊,請參閱此文件

引用自:https://serverfault.com/questions/967537