域重写后Nginx双斜线

时间:2016-07-18 15:48:00

标签: linux ubuntu amazon-web-services nginx url-rewriting

我在生产环境中使用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模式下设置监听器,请求工作正常。

由于

2 个答案:

答案 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)

尝试一下:

echo 'http://foo.com//bar/fool' | sed 's/\/\//\//g'

这是使用sed unix命令搜索//并将其替换为/