删除mod_rewrite末尾的所有尾部斜杠

时间:2014-02-27 10:21:14

标签: apache mod-rewrite

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

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

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

我找不到工作规则,我正在使用http://htaccess.madewithlove.be/

进行测试

我尝试了以下几种组合:

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。

1 个答案:

答案 0 :(得分:0)

这应该有效:

RewriteRule ^(/test/page)/+$ $1 [R=301,L]

编辑:匹配任何路径并删除尾部斜杠:

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

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