我正在尝试从 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;
}