Nginx

在 Nginx 配置中,如何限制正則表達式匹配?

  • December 11, 2017

在我的伺服器的 nginx 配置文件中,我編寫了以下位置塊:

location ~ /page/(?!(3/?|5/?|6/?|8/?)) {
   return 301 https://anothersite.com/page$is_args$args;
}

有了這個,我試圖重定向所有 /page/ 除了以下內容:

/page/3
/page/3/
/page/5
/page/5/
/page/6
/page/6/
/page/8
/page/8/

這適用於這些頁面。但是,這也排除了任何以該模式開頭的頁面。所以頁面如下

/page/33
/page/814
/page/577

不要被重定向,但他們應該是。我應該如何更改該正則表達式,以便我可以將匹配限制為 /page/ 之後的第一個字元(帶有或不帶有斜杠)?

我也試過這個:

location ~ "/page/(?!([3]{1}/?|[5]{1}/?|[6]{1}/?|[8]{1}/?))" {
   return 301 https://anothersite.com/page$is_args$args;
}

然而,這似乎與第一個模式完全一樣。

任何幫助深表感謝!提前致謝!

不幸的是,我無法弄清楚那個。我最終這樣做了:

location /page/ { return 301 <https://anothersite.com/page>$is_args$args; } location ~ ^/page/3/?$ {} location ~ ^/page/5/?$ {} location ~ ^/page/6/?$ {} location ~ ^/page/8/?$ {}

儘管它不像我希望的那樣是單行的,但它可以完成這項工作。

您需要將字元串的結尾與$. 這意味著超出該點的字元串將與正則表達式不匹配。

例如:

location ~ /page/(?!(3/?|5/?|6/?|8/?))$ {

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