【问题标题】:Duplicate slash rewrite in Nginx server block not matchingNginx 服务器块中的重复斜杠重写不匹配
【发布时间】:2018-02-14 14:05:55
【问题描述】:

我正在尝试编写 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

【问题讨论】:

  • 嘿,我也面临同样的问题,您能建议我如何防止这种情况发生

标签: regex nginx


【解决方案1】:

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

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

这具有将merge_slashes off 用于侦听该端口的所有站点的副作用。

【讨论】:

  • 嘿,我也面临同样的问题,你能建议我如何防止这种情况发生
猜你喜欢
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 2015-01-27
  • 2021-09-10
  • 2017-06-15
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
相关资源
最近更新 更多