apache2.4 でのmod_rewriteの挙動について
apache2.4 でのmod_rewriteを使用すると「index.html」が付与される
「.htaccess」でmod_rewriteを使用して、URLの書き換え・リダイレクト処理をおこなったときの挙動が、Apache2.2系とApache 2.4系では挙動が異なります。
$ sudo vim /var/www/html/.htaccess RewriteEngine On RewriteRule ^(.*)$ http://example/data/$1 [QSA,P,L]
この設定でブラウザでアクセスすると mod_rewrite の設定が効いて「http://example/data/index.html」に転送されます。
以前のApache 2.2系だと「http://example/data/」に転送がかかります。
Apache 2.4系だと「index.html」が付与され「http://example/data/index.html」に転送されます
ブラウザでは、以下のようにエラーになります
Forbidden Not Found The requested URL /data/index.html was not found on this server.
自動で「index.html」を付与しない場合は「DirectoryCheckHandler on」と設定すれば良いのですが、Apache2.4.8以降しか対応していないのでCent OS 7のyumでインストールすると、httpd 2.4.6となりこのオプションは使えません
参考URL:Apache Module mod_dir
自動で「index.html」が付与されても問題がない場合は多いですが、トップページが「index.html」がなく「index.php」の場合はトップページに「index.html」が付与されるとサイトが見れなくなります
「DirectoryCheckHandler」を使えるApcahe 2.4.8以降なら問題があれば、使えない場合か以下のように「DirectoryIndex」と空で設定すれば、「index.html」が付与されずにリライトが効き、index.phpにアクセスできます
$ sudo vim /var/www/html/.htaccess DirectoryIndex RewriteEngine On RewriteRule ^(.*)$ http://example.com/data/$1 [QSA,P,L]
ディスカッション
コメント一覧
Apache のバージョンは 2.4.6 ではないでしょうか?
Apacheが、2.4.6 の場合は、「DirectoryCheckHandler」が使用できないので、「DirectoryIndex」を空にすれば、「index.html」が付与されずにリライトできるはずです
Apacheが、2.4.8 以降の場合は、「DirectoryCheckHandler」が使用できるのでそのパラメータで対応する記事となります