我需要删除所有尾部斜杠但仅在请求的路径上删除,而不删除查询字符串:
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。
答案 0 :(得分:0)
这应该有效:
RewriteRule ^(/test/page)/+$ $1 [R=301,L]
编辑:匹配任何路径并删除尾部斜杠:
RewriteRule ^(/.+?)/+$ $1 [R=301,L]
这将提供一个非贪婪的匹配,直到锚定到字符串末尾的一个或多个/
中的第一个。