如何使用mod_rewrite(apache2)删除所有URI中的多个斜杠



我正在尝试从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

最新更新