我正在尝试从apache2中的URI中删除所有双斜杠。我的方法适用于任何不包含尾部斜杠或文件名但在后者上失败的URI。
免责声明:我还不是正则表达式专家——也许这就是问题所在。
工作:
http://localhost////test->重写为->http://localhost/test
http://localhost//////test////test->重写为->http://localhost/test/test
断开(两个URI都工作,但未重写):
http://localhost/////test/////test/////->根本不重写
http://localhost/////test/////test/test.html->完全不重写
我的apache2配置摘录:
<Directory /var/www/html/>
AllowOverride all
Require all granted
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} (.*)//(.*)
RewriteRule (.*) %1/%2 [R=301,L]
</Directory>
我尝试了我能找到的每一种方法,但每一种方法都只在没有文件名或尾部斜杠附加到URI时实现了对多个斜杠的替换。我还在Firefox和Chromium中检查了我的DevTools,看看301重定向是否发生在不工作的URI上,但没有。
我在/var/www/html中的文件夹中也没有.htaccess文件。
解决方案是删除第一个和第二个正则表达式匹配组(%1/%2
->%1%2
)之间的斜杠,我还转义了正则表达式中的斜杠(尽管apache似乎也可以在没有斜杠的情况下处理它)。
我还将301重定向替换为302重定向以进行测试。请记住,为了生产使用而更改它。
如果遇到同样的问题,这里有一个包含它的宏片段:GitHub