我在生产环境中使用Nginx,我们在uri中有一些带有双斜杠的url,如下所示:
http://foo.com//bar/foo
我想重写或重定向到:
http://foo.com/bar/foo
选项“merge_slashes”它已经启用了,我试过这个:
merge_slashes off;
rewrite (.*)//+(.*) $1/$2 permanent;
但不起作用,你知道吗?
谢谢
编辑:
所以,如果斜杠在第一个“/”之后重写,即:
http://pippo.it/foo//bar
但是如果在域名不起作用之后出现双斜线,即:
http://pippo.it//foo/bar
我试图转储变量$ request_uri,这就是结果:
url: http://pippo.it//foo/bar
expect: $request_uri -> //foo/bar
result: $request_uri -> /foo/bar
url: http://pippo.it///foo/bar
expect: $request_uri -> ///foo/bar
result: $request_uri -> //foo/bar
可能是个错误吗?
编辑2:
我发现了错误,问题是elb(aws),如果我直接调用ec2实例(其中安装了nginx)我可以看到前2个斜杠,但如果我调用elb,则负载均衡器删除第一个斜线,我在支持中心开了个案。
编辑3:
发现问题:如果你使用HTTP监听器设置elb,我不知道为什么但请求没有全斜线,如果你在TCP模式下设置监听器,请求工作正常。
由于
答案 0 :(得分:1)
设置实际上是正确的。用nginx / 1.9.12测试它
root@8317e542a878:/etc/nginx/sites-enabled# curl -I localhost//
HTTP/1.1 301 Moved Permanently
Server: nginx/1.9.12
Date: Mon, 18 Jul 2016 20:34:29 GMT
Content-Type: text/html
Content-Length: 185
Location: http://localhost/
Connection: keep-alive
您是否重新加载了运行nginx的设置?
nginx -s reload
答案 1 :(得分:0)