為什麼這個 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 處於什麼上下文?它在虛擬主機內嗎?

以下實現了相同的結果,但更好:

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

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

也沒有奇怪的副作用。

相關內容