Nginx服务器块中重复的斜杠重写不匹配

时间:2018-02-14 14:05:56

标签: regex nginx

我正在尝试编写URL重写以从URL中删除重复的斜杠。

在听完其他答案之后:

我有这段代码

merge_slashes off;
rewrite (.*)//(.*) http://example.com/$1/$2 permanent;

但是,这与URL中的任意数量的重复斜杠都不匹配。

以下是我的测试网址

/page1/content.html # shouldn't match
/page1//content.html # should match and rewrite
/page1///content.html # should match and rewrite

我尝试过这些不同的正则表达式字符串:

(.*)//(.*)
(.*)/+/(.*)
(.*)//+(.*)
^(.*)//(.*)$
^(.*)/+/(.*)$
^(.*)//+(.*)$
"(.*)//(.*)"
"(.*)/+/(.*)"
"(.*)//+(.*)"
"^(.*)//(.*)$"
"^(.*)/+/(.*)$"
"^(.*)//+(.*)$"

它们都不匹配。

使用正则表达式测试程序,我可以看到我的正则表达式是有效的并且自行匹配:https://regex101.com/r/U8nghO/1/

我做错了什么?

这是我的完整配置文件:https://paste.ngx.cc/286d5a2ecfc30152

1 个答案:

答案 0 :(得分:0)

事实证明merge_slashes off;仅在默认server块或http块中有效。

将指令移动到我的http块后,(.*)//(.*)足以捕获重写。

这会导致所有正在侦听该端口的网站转为merge_slashes off的副作用。