Почему 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>

Никаких странных побочных эффектов также не наблюдается.

Связанный контент