为什么这个 Apache 2.2 mod_rewrite RewriteRule 对 403 不起作用?

为什么这个 Apache 2.2 mod_rewrite RewriteRule 对 403 不起作用?

在我的httpd.conf我有:

<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
</FilesMatch>

在我的.htaccess档案里有:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

当我通过 HTTP 访问时,example.com/.ht我希望重定向到www.example.com/.ht,但 RewriteRule 却从未发生。客户端从未重定向到 www。在所有其他情况下,客户端都会正确重定向。

我没有任何 ErrorDocument 指令。

只是想知道为什么会发生这种情况以及如何纠正 403 上的这种行为。

答案1

由于您可以访问 httpd.conf,因此没有理由使用 .htaccess。

FilesMatch 处于什么上下文中?它在 vhost 内部吗?

以下实现相同的结果,但效果更好:

<VirtualHost *:80>
  ServerName example.com
  Redirect / http://www.example.com/
</VirtualHost>

<VirtualHost *:80>
  ServerName www.example.com
  DocumentRoot /var/www/something
</VirtualHost>

也没有任何奇怪的副作用。

相关内容