我可以使用以下方法删除URL中的任何位置的多个斜杠:
RewriteCond %{REQUEST_URI} ^(.*?)(/{2,})(.*)$
RewriteRule . %1/%3 [R=301,L]
但它不适用于域
之后的多个斜杠我试过了
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L]
和
RewriteCond %{THE_REQUEST} ^([A-Z]{3,9})\ (.*)//([^\ ]*)
RewriteRule ^ %2/%3 [R=301,L]
从开始,都会产生预期的重新制作
domain.com/////hello
到
domain.com/hello
但来自
domain.com/////héllo
结果已编码
domain.com/h%25c%25allo
如何在域后删除多个斜杠时防止重音字符被编码?
编辑:梨到anubhava的回答
RewriteCond %{THE_REQUEST} \s/+(.*?)/{2,}([^\s]*) [NC]
RewriteRule ^ %1/%2 [R=301,L,NE]
重音字符受到保护,并且会有成功而不是重复斜线
domain.com////////héllo
但不只有2
domain.com//héllo
答案 0 :(得分:2)
此规则适用于您:
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+(.*?)/+(/[^\s]+) [NC]
RewriteRule ^ %1%2 [R=302,L,NE]
这将执行以下重定向:
/////help => /help
/////héllo/////abc/////123 => /héllo/abc/123
答案 1 :(得分:0)
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L,NE]