Apache mod_rewrite 在 URL 末尾添加额外的斜杠

Apache mod_rewrite 在 URL 末尾添加额外的斜杠

我正在运行 CentOS 6.0,并尝试让 mod_rewrite 从任何以 www 为前缀的 URL 中删除 www。这是我在 httpd.conf 中的代码:

笔记:我正在使用具有完全根访问权限的 VPS,因此我没有使用 .htaccess 文件或任何“每个目录”设置。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.aaronjwood\.com$
RewriteRule ^(.*)$ http://aaronjwood.com/$1 [R=301,L]

这对于所有页面都适用,只是 URL 将被写入http://aaronjwood.com//(注意两个斜线)或http://aaronjwood.com//contact.php。有人能帮我弄清楚为什么会发生这种情况吗?

答案1

由于它位于主配置文件中,而不是每个目录(<Directory>.htaccess),因此不会为了上下文而删除前导斜杠。它实际上是在每次重写时添加(或尝试添加 - 不确定 Apache 是否在大多数情况下删除了多余的斜杠,或者客户端浏览器是否删除了)第二个斜杠。

只需考虑在匹配的字符串中包含前导斜杠这一事实:

RewriteRule ^/(.*)$ http://aaronjwood.com/$1 [R=301,L]

答案2

因为它直接在 vhost 中,所以解决方案如下:删除此处的斜线:http://aaronjwood.com$1

另外一个提示:当独自一人时,^(.*)$与 相同(.*)

解决方案如下:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.aaronjwood\.com$
RewriteRule (.*) http://aaronjwood.com$1 [R=301,L]

请告诉我它是否有效。

奥利维尔

相关内容