通过.htaccess从URL中删除双斜杠或多斜杠的问题

7cwmlq89  于 2023-08-06  发布在  其他
关注(0)|答案(7)|浏览(167)

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

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

字符串
这对于出现在URI中间的斜杠很有效,例如,If use url:

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


它被重定向到正确的单一slahs url:
http://demo.codesamplez.com/html5/audio
但是如果URL在开始时包含双斜杠,就在域名之后,那么它就不起作用了,例如:

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


它没有被重定向。
我如何修复上述规则,使其也适用于这种类型的url?- 谢谢-谢谢

hgb9j2n6

hgb9j2n61#

给予一下:

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

字符串
它应该重定向到域末尾的一个斜杠。你的进步:

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

eivgtgni

eivgtgni2#

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

<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再次组合两个拆分的字符串,但此时只有一个斜杠。

gj3fmq9x

gj3fmq9x3#

根据this链接,以下代码应注意URL中的额外斜杠(任何地方)。

RewriteCond %{THE_REQUEST} //
RewriteRule ^.*$ $0 [R=302,L,NE]

字符串

4c8rllxm

4c8rllxm4#

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

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

klr1opcd

klr1opcd5#

这种情况很容易解决,使用一个美味的. 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,}),我们可以通过$1访问没有前导双斜杠的正确URL。

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

https://www.meysmahdavi.com//重定向到https://www.meysmahdavi.com/https://www.meysmahdavi.com//blog-post/重定向到https://www.meysmahdavi.com/blog-post/https://www.meysmahdavi.com//path/directory/重定向到https://www.meysmahdavi.com/path/directory/
所以基本上它会从任何URL中删除双斜杠。
来源:https://www.meysmahdavi.com/

b09cbbtk

b09cbbtk6#

只要把下面的代码到你的.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>

字符串

nwwlzxa7

nwwlzxa77#

这里有一个稍微的变化,我发现当你有一个.htaccess文件和许多子目录时效果更好:

# Remove multiple slashes anywhere in url

# rule 1: Remove multiple leading slashes directly after the domain name
RewriteCond %{THE_REQUEST} \s/{2,}
RewriteRule (.*) $1 [R=301,L]
 
# rule 2: Remove multiple slashes anywhere in the rest of the path
RewriteCond %{THE_REQUEST} \s/+(.*?)/{2,}([^\s]*)
RewriteRule ^ %1/%2 [R=301,L,NE]

字符串

相关问题