使用正则表达式合并 2 条 Nginx 重写规则

使用正则表达式合并 2 条 Nginx 重写规则

我在 Nginx 中重定向了许多 URL,但有些 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 才需要保留。非常感谢。

答案1

如果全部您的 URL 中有/bereich部分,并且只有部分 有-es-de部分,请尝试以下操作:

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

或者,更严格的正则表达式仅适用于/de/kaufen/前缀:

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

相关内容