如何使用 nginx 删除 URL 末尾的斜杠

如何使用 nginx 删除 URL 末尾的斜杠

我正在尝试从 URL 中删除尾部斜杠。我搜索了很多并尝试了一些解决方案,但对我来说它们不起作用。

我试过这个

rewrite ^/(.*)/$ /$1 permanent;

但它在末尾留下一个斜线(example.com/ 或 example.com/post/)但我需要 example.com 和 example.com/post

我也尝试过这个解决方案

if ($request_uri ~ (.*?\/)(\/+)$ ) 
{
  return 301 $scheme://$host$1;
}

它是最好的之一,但最后也留下了一个斜线。

而且我在尝试完所有类似操作后控制台仍然出现错误:

GET http://example.com/post 404 (Not Found)

我是 nginx 新手,了解的不多,如何实现带有尾部斜杠的 URL 重定向?

答案1

不需要任何如果(或者但是),重写就可以了:

rewrite /((?U).*)(/+)$ /$1 redirect;

如果没有“不贪婪” - (?U) - $1 将会拾取除一个 / 之外的所有内容。

答案2

对我来说,这名工人:

location ~ (.*)/$ {
  if ($query_string) {
    return 301 $scheme://$host$1?$query_string;
  }
  return 301 $scheme://$host$1;
}

答案3

该解决方案也经过测试并且效果良好。

由于没有按照上述最佳实践进行重写,因此应该具有更好的性能。

location ~ (.*?\/)(\/+)$ {
  return 301 $scheme://$host$request_uri;
}

相关内容