Apacheディレクトリインデックス設定

トラブル発生の背景

自作ローカルサーバのDocumentRootの中では、index.htmlとindex.php(cgiの役割を果たすためのphp)ファイル両方が存在する時、かつ、クライアント側では、サーバにアクセスファイル名を指定しない場合、システムが正常に動作しない場合があります(私の場合だと、404エラーが発生してしまいます)。

※DocumentRootとは、クライアントからサーバにアクセスできるディレクトリのことです。

トラブル発生の原因分析

クライアントからリクエストがあった時、ファイル名を指定せずにディレクトリだけ指定された時があります。そのようなファイル名が省略された場合にどのファイルを返すのかを「DirectoryIndex」で指定します。

DirectoryIndex ファイル名 ファイル名 .... ※ファイル名は1つまたは複数指定することが可能です。

さて、デフォル状態でディレクトリインデックスの設定はどうなっているのかを調べるために、httpd.confで「DirectoryIndex」を検索します。私のapacheサーバでは下記のようなデフォル設定になっています。

<IfModule dir_module>
   DirectoryIndex index.php index.pl index.cgi index.asp index.shtml index.html index.htm \
                  default.php default.pl default.cgi default.asp default.shtml default.html default.htm \
                 home.php home.pl home.cgi home.asp home.shtml home.html home.htm
 
</IfModule>

上記のデフォルト設定では、クライアント側で「http://localhost/」を入力したら、サーバのほうでは、「index.php」「index.pl」「index.cgi」「index.asp」などを順番にDocumentRootでファイルを検索していく、見つかれば、そのファイルをクライアントに返す。もしDocumentRootディレクトリの下に、「index.php」「index.html」両方が存在する場合だとしたら、クライアント側に返すのは「index.html」ではなく「index.php」です。

トラブル解決方法

クライアントが「http://localhost」で入力したら、「index.html」にアクセスしてほしいので、httpd.confのDirectoryIndexが下記のように修正します。

<IfModule dir_module>
   DirectoryIndex  index.html 
</IfModule>

参考サイド:

  1. ディレクトリインデックス(DirectoryIndex)

  2. Apache VirtualHost Setting Up