Nginx 自动将通配符添加到重定向

Nginx 自动将通配符添加到重定向

我正在使用 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/blogginglocation = /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请参阅这个文件了解详情。

相关内容