Nginx
在 Nginx 配置中,如何限制正則表達式匹配?
在我的伺服器的 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/?))$ {