我正在使用 nginx 进行一些重定向,但对于某些重定向,它会自动匹配 URL 末尾的所有内容,从而导致重定向到错误的页面。
我有这两个重定向。
location /en/blogging {
return 301 /en/blog;
}
location ~^/en/blogging/(?<suffix>.*)$ {
return 301 /en;
}
问题是第一个似乎会自动在重定向中添加通配符。
目前结果:
/en/博客
/en/博客/测试
/en/bloggingtest
所有内容均重定向至
/en/博客
预期结果:
/en/博客 -> /en/博客
/en/blogging/test -> /en
/en/bloggingtest -> 无重定向
为什么会发生这种情况?我该如何避免?
答案1
您正在使用location /en/blogging
匹配任何 URI 的开始于 /en/blogging
location = /en/blogging
。如果要匹配单个 URI ,则应使用/en/blogging
。
该语句location ~^/en/blogging/(?<suffix>.*)$
将匹配以/en/blogging/
- 开头的任何 URI,但 也是如此location /en/blogging/
,但没有增加正则表达式的复杂性,也不会捕获后缀。
例如:
location = /en/blogging {
return 301 /en/blog;
}
location ^~ /en/blogging/ {
return 301 /en;
}
^~
可能需要使用修饰符来更改前缀位置的优先级,特别是如果同一块内有其他冲突的正则表达式位置。server
请参阅这个文件了解详情。