Ran*_*ana 11 url .htaccess slash
我使用以下htaccess rul从web url中删除两个或多个斜杠:
#remove double/more slashes in url
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
这对于在uris中间发生的斜线很好,例如,如果使用url:
http://demo.codesamplez.com/html5//audio
Run Code Online (Sandbox Code Playgroud)
它被重定向到适当的单一slahs url:
http://demo.codesamplez.com/html5/audio
但是如果url在开头包含双斜杠,那么只是在域名之后,那么它就不起作用了,例如:
http://demo.codesamplez.com//html5/audio
Run Code Online (Sandbox Code Playgroud)
它没有被重定向.
我如何修复上述规则以适用于此类网址?谢谢.
Mar*_*cel 16
尝试一下:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/{2,} [NC]
RewriteRule ^(.*) $1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
它应该重定向到域末尾的单个斜杠.而你的改进:
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule . %1/%2 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
对我来说,以下规则非常有效:
<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>
Run Code Online (Sandbox Code Playgroud)
这个想法在很大程度上基于 Marcels 的回答(谢谢!),但这个更轻量级并包含RewriteBase,如果您使用特定的子目录结构,这可能会有所帮助。此外,Marcels 的回答缺乏解释,我想解决这个问题:
规则 1:{THE_REQUEST}包含类似的内容GET /index.html HTTP/1.1(参见文档)。因此,如果我们匹配第一个空格 ( \s) 后跟多个斜杠 ( /{2,}),我们可以通过$1.
规则 2:正则表达式^(.*)/{2,}(.*)$在多个斜杠上拆分请求 URI。%1/%2然后再次组合两个拆分的字符串,但此时只有一个斜线。
小智 5
根据此 链接,以下代码应注意 URL 中的额外斜杠(任何地方)。
RewriteCond %{THE_REQUEST} //
RewriteRule ^.*$ $0 [R=302,L,NE]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19620 次 |
| 最近记录: |