Nginx

將 2 個 Nginx 重寫規則與正則表達式結合起來

  • December 14, 2018

我有一堆我在 Nginx 中重定向的 URL,但是有些在我想刪除的位置的末尾有一個“-de”。我還刪除了 URL 的“bereich/”部分:

https://www./example.com/de/kaufen/bereich/menorca-de/
https://www./example.com/de/kaufen/bereich/spain-de/
https://www./example.com/de/kaufen/bereich/costa-de-la-calma/

…我想以這種格式結束:

https://www./example.com/de/kaufen/menorca/
https://www./example.com/de/kaufen/spain/
https://www./example.com/de/kaufen/costa-de-la-calma/

我可以使用兩個單獨的重寫規則來做到這一點,例如:

# Remove ES and DE from URL's
rewrite ^(.*)(-de|-es)/$ $1/ permanent;

# Remove bereich from URL
rewrite ^/de/kaufen/([a-zA-Z'-]+)/$ /de/kaufen/$1/? permanent;

..但想問是否有辦法結合這兩個規則,所以鏈中只有一個重定向而不是兩個。我包含了第三個 URL,以證明某些 URL 有“-de”需要單獨放置,只有那些在正斜杠前面以“-de”結尾的 URL。非常感謝。

如果您的所有URL 都有一個/bereich部分,並且只有其中一些有一個-es-de部分,請嘗試以下操作:

rewrite ^(.*)bereich/([^/]+?)(?:-de|-es)?\/$ $1$2/ permanent;

或者,更嚴格的正則表達式僅適用於/de/kaufen/前綴:

rewrite ^/de/kaufen/bereich/([^/]+?)(?:-de|-es)?\/$ /de/kaufen/$1/ permanent;

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