为什么这些解决方案都无法在我的 Apache 服务器上工作:RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s/{2,} [NC]RewriteRule ^(.*) $1 [R=302,L]orRewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
为什么这些解决方案都不适用于我的 Apache 服务器:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/{2,} [NC]
RewriteRule ^(.*) $1 [R=302,L]
或者
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
RewriteRule . %1/%2 [R=302,L]
或者
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=302,L]
以及我尝试过的其他内容。
我尝试了此页面上的所有解决方案: 通过 .htaccess 从 URL 中删除双斜杠或多个斜杠的问题
以及其他页面。
问题在于 htaccess 中的规则与上述模式中的双斜杠不匹配。
我还尝试了 \'literal\' 模式,使用精确的 URL,不使用正则表达式模式。仍然没有结果。但使用一个斜线 - 一切正常。
当 Apache 发现:\'//\' 时,它似乎遇到了问题 - 显然无法识别该 URL 并且省略了规则。
这个想法很简单:去掉双斜线,用单斜线代替:
http://demo.codesamplez.com/html5//audio -> http://demo.codesamplez.com/html5/audio
您知道如何将双斜杠 \'//\' 的 URL 重定向为单斜杠 \'/\' 吗?
这是 htaccess(删除了文件中最长的注释):
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/test//slash
RewriteRule ^(.*)$ /test/slash [R=302,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
# Sets the HTTP_AUTHORIZATION header removed by Apache
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# Rewrite all other queries to the front controller.
RewriteRule ^ %{ENV:BASE}/app.php [L]
</IfModule>