2013-06-13 29 views
10

我使用下列htaccess的RUL从网站的URL删除双以上的斜线:问题在卸下倍以上斜线从URL中使用的.htaccess

#remove double/more slashes in url 
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ 
RewriteRule . %1/%2 [R=301,L] 

这是工作的罚款斜杠在中间发生的URI,例如,如果使用网址:

http://demo.codesamplez.com/html5//audio 

它被重定向到正确的单slahs网址:

http://demo.codesamplez.com/html5/audio

但如果URL包含在开始双斜杠,域名刚过,那么它不工作,例如:

http://demo.codesamplez.com//html5/audio 

其不被重定向。

如何修复上述规则以适用于此类型的网址?谢谢。

回答

12

给它一个尝试:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/{2,} [NC] 
RewriteRule ^(.*) $1 [R=301,L] 

应该在域结束重定向到一个单一的斜线。 和你们的改善:

RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$ 
RewriteRule . %1/%2 [R=301,L] 
+0

根据您的答案,替换多个连字符,我做了:RewriteCond%{REQUEST_URI} ^(。*) - (。*)$ RewriteRule。 %1-%2 [R = 301,L] --works,谢谢 –

+0

此解决方案适用于我。如果url是域名,谢谢 –

1

为了防止您的网址字符如长的重复:

http://demo.codesamplez.com/html5///////////////////////////////////////////audio 

,你可以这样做:

RewriteCond %{REQUEST_METHOD} !=POST 
RewriteCond %{REQUEST_URI} ^(.*?)(/{2,})(.*)$ 
RewriteRule . %1/%3 [R=301,L] 

它应该可与:

http://demo.codesamplez.com//html5/audio 

另见:.htaccess - how to remove repeated characters from url?

+1

将无法​​正常工作。COM/- 重定向的网址将是相同的! – dude

+0

这个答案已经足够好了,可以和给出的例子一起工作。在你的情况下,使用'RewriteCond%{REQUEST_URI} ^(。*?)(/ {2,})(。*)?$'来声明最后一组字符是可选的。下次请在投票前先询问下。 – RafaSashi

0

对于我来说,下面的规则很好地工作:(!谢谢)

<IfModule mod_rewrite.c> 
    RewriteBase/

    # rule 1: remove multiple leading slashes (directly after the TLD) 
    RewriteCond %{THE_REQUEST} \s/{2,} 
    RewriteRule (.*) $1 [R=301,L] 

    # rule 2: remove multiple slashes in the requested path 
    RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$ 
    RewriteRule (.*) %1/%2 [R=301,L] 
</IfModule> 

的想法在很大程度上基于Marcels的答案,但是这一次是一个比较轻便,包括RewriteBase如果您使用特定的子目录结构,这可能会有所帮助。此外,Marcels回答缺乏我想解决的解释:

规则1:{THE_REQUEST}包含类似GET /index.html HTTP/1.1(请参阅docs)。因此,如果我们匹配第一个空格(\s)后跟多个斜线(/{2,}),我们可以通过$1访问正确的URL,而不需要前导双斜杠。

规则2:正则表达式^(.*)/{2,}(.*)$将请求URI分割为多个斜线。然后%1/%2再次合并两个拆分的字符串,但此时只有一个斜线。