この 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>

奇妙な副作用もありません。

関連情報