apache2.4 でのmod_rewriteの挙動について

2021-07-12

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]

 

 

スポンサーリンク

0
0

LinuxApache,CentOS 7

Posted by admin