对不起,如果这个问题被问了很多次。我无法让 nginx 进行正确的重写。我需要删除网址的最后一部分。例如,这是我拥有的网址:
https:/mydomain.com/this/is/some/url/page/0
https:/mydomain.com/this/is/some/url/page/1
我需要将这些都重写为:
https:/mydomain.com/this/is/some/url
这是我迄今为止尝试过的:
location / {
...
rewrite ^/(.*)/page/0|1$ $1 last;
...
}
但它不起作用。在我看来它是正确的?这有什么问题? (我讨厌正则表达式)。
编辑:
location / {
# Remove trailing double slashes.
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}
# Remove trailing slashes.
rewrite ^/(.*)/$ /$1 permanent;
# Rewrite page/0 and page/1 from url.
rewrite ^/(.*)/page/[01]$ /$1 last;
proxy_pass http://backend_web;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
最佳答案
0|1
应该在括号内或重新定义为字符类。
重写的 URI 需要一个前导 /
一样nginx
URI 有一个领先的 /
.
所以所有这些都应该是等价的:
rewrite ^/(.*)/page/(0|1)$ /$1 last;
rewrite ^/(.*)/page/[01]$ /$1 last;
rewrite ^(/.*)/page/[01]$ $1 last;
有一个有用的正则表达式网站 here .
关于nginx 重写 url 并删除最后一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47772291/