17

我正在使用以下 htaccess rul 从 web url 中删除双斜杠或多个斜杠:

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

这对于出现在 uri 中间的斜线效果很好,例如,如果使用 url:

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

它被重定向到正确的单斜杠 url:

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

但是,如果 url 在开头包含双斜杠,就在域名之后,那么它就不起作用,例如:

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

它没有被重定向。

我如何才能修复上述规则以适用于这种类型的网址?谢谢。

4

6 回答 6

18

试试看:

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

它应该重定向到域末尾的单个斜杠。和你的改进:

RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule . %1/%2 [R=301,L]
于 2013-08-29T17:24:15.163 回答
8

对我来说,以下规则非常有效:

<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,如果您使用特定的子目录结构,这可能会有所帮助。此外,马塞尔斯的回答缺乏解释,我想解决这个问题:

规则 1:{THE_REQUEST}包含类似的内容GET /index.html HTTP/1.1(请参阅docs)。因此,如果我们匹配第一个空格 ( \s) 后跟多个斜线 ( /{2,}),我们可以通过$1.

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

于 2018-02-02T10:32:57.570 回答
6

根据 链接,以下代码应处理 URL 中的额外斜杠(任何位置)。

RewriteCond %{THE_REQUEST} //
RewriteRule ^.*$ $0 [R=302,L,NE]
于 2018-05-09T14:50:18.170 回答
2

为了防止您的网址中出现长时间重复的字符,例如:

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 - 如何从 url 中删除重复的字符?

于 2013-10-19T23:30:03.027 回答
0

使用美味的 .htaccess 片段很容易解决这种情况。您需要做的就是复制以下代码和您网站的根.htaccess文件:

<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>

规则 1: {THE_REQUEST}包含类似GET /index.html HTTP/1.1

因此,如果我们匹配第一个空格(\s)后跟多个斜杠(/{2,}),我们可以通过没有前导双斜杠访问正确的 URL $1

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

例如,该指令将重定向如下:

https://www.meysmahdavi.com//重定向到https://www.meysmahdavi.com/ https://www.meysmahdavi.com//blog-post/重定向到https://www.meysmahdavi.com/博客帖子/ https://www.meysmahdavi.com//path/directory/重定向到https://www.meysmahdavi.com/path/directory/

所以基本上它会从任何 URL 中删除双斜杠。

来源:https ://www.meysmahdavi.com/

于 2021-09-21T05:37:58.947 回答
0

只需将以下代码放入您的 .htaccess 文件中。它将从任何地方删除多个斜线。在 url 的末尾和从 url 的中间。

<IfModule mod_rewrite.c>
RewriteBase /`enter code here`
RewriteCond %{THE_REQUEST} \s[^?]*//
RewriteRule ^.*$ /$0 [R=302,L,NE]
#Remove slash anywhere from url
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
# 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`enter code here`
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule (.*) %1/%2 [R=301,L]
</IfModule>
于 2021-07-20T06:26:48.920 回答