很抱歉,如果多次询问此问题。我不能让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 :(得分:2)
0|1
应在括号内或重新定义为字符类。
重写的URI需要前导/
,因为所有nginx
URI都有前导/
。
所以这些都应该是等价的:
rewrite ^/(.*)/page/(0|1)$ /$1 last;
rewrite ^/(.*)/page/[01]$ /$1 last;
rewrite ^(/.*)/page/[01]$ $1 last;
有一个有用的正则表达式网站here。