Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 删除mod_rewrite结尾处的所有尾部斜杠_Apache_Mod Rewrite - Fatal编程技术网

Apache 删除mod_rewrite结尾处的所有尾部斜杠

Apache 删除mod_rewrite结尾处的所有尾部斜杠,apache,mod-rewrite,Apache,Mod Rewrite,我需要删除所有尾部斜杠,但只删除请求路径上的斜杠,而不删除查询字符串: http://example.com/test/page////////?filter=test http://example.com/search// 到 我找不到有效的规则,我正在用 我尝试了以下几种组合: RewriteRule ^(.*)/+$ $1 [R=301,L] 不起作用,因为左侧部分比/+部分更贪婪。将只匹配1个斜杠 如果我使用RewriteRule^(.*)/$$1[R=301,L],它会导致重定向循

我需要删除所有尾部斜杠,但只删除请求路径上的斜杠,而不删除查询字符串:

http://example.com/test/page////////?filter=test
http://example.com/search//

我找不到有效的规则,我正在用

我尝试了以下几种组合:

RewriteRule ^(.*)/+$ $1 [R=301,L]
不起作用,因为左侧部分比
/+
部分更贪婪。将只匹配1个斜杠

如果我使用
RewriteRule^(.*)/$$1[R=301,L]
,它会导致重定向循环,直到达到重定向限制,我需要替换此规则

我试过这个:

RewriteRule ^(.*)/////////$ $1 [N]
RewriteRule ^(.*)////////$ $1 [N]
RewriteRule ^(.*)///////$ $1 [N]
RewriteRule ^(.*)//////$ $1 [N]
RewriteRule ^(.*)/////$ $1 [N]
RewriteRule ^(.*)////$ $1 [N]
RewriteRule ^(.*)///$ $1 [N]
RewriteRule ^(.*)//$ $1 [N]
RewriteRule ^(.*)/$ $1 [L,R=301]
但是,如果在最后一条规则命中之前删除了所有斜杠,则不会重定向301。

这应该可以:

RewriteRule ^(/test/page)/+$ $1 [R=301,L]
编辑:要匹配任何路径并删除尾部斜线:

RewriteRule ^(/.+?)/+$ $1 [R=301,L]

这将提供非贪婪匹配,直到锚定到字符串末尾的一个或多个
/
中的第一个。

这仅删除1个斜杠:
http://example.com/test/page///?filter=test
http://example.com/test/page//?filter=test
您在哪里测试这个?对我来说,它工作得非常完美,我没有理由认为正则表达式可能会有这样的行为。我现在在live server上和问题中提供的站点上进行了测试。这条规则会将
url//
重定向到
url/
url/
url
这是一个重定向循环(你可以在FireBug中看到这一点)。我不相信你提供的网站,它的表现似乎不是很好,而且他们自己承认它有缺陷。应该可以在服务器上工作。就像我说的,如果你输入正确的话,正则表达式不可能有那样的行为<代码>$1不能是除
/test/page
之外的任何东西。我们在此处实现了此功能,以供您查看:
RewriteRule ^(/.+?)/+$ $1 [R=301,L]