DirectoryIndexディレクティブ:ディレクトリへのリクエストに対してどのファイルを返すのか

DirectoryIndex ディレクティブは、ブラウザから Apache へディレクトリへのリクエスト(例えば http://www.example.com/sub/ などのようなリクエスト)があった場合にどのファイルを返すのかを設定するときに使用します。ここでは Apache の DirectoryIndex ディレクティブの使い方について解説します。

(Last modified: )

DirectoryIndexディレクティブの使い方

DirectoryIndex ディレクティブはクライアントからのリクエストが最後が「/」で終るディレクトリだった場合にどのファイルをクライアントへ返すのかを設定する場合に使います。書式は次のとおりです。

DirectoryIndex ファイル名 [ファイル名 [...]]

記述できる場所は httpd.conf, VirtualHost, Directory, .htaccess です。 .htaccess で設定する場合は AllowOverride Indexes が設定されている必要があります。

ファイル名は1つまたは複数指定することが可能です。例えばリクエストがディレクトリだった場合、そのディレクトリに含まれる index.html ファイルを返す場合には次のように記述します。

DirectoryIndex index.html

このように設定されている場合、例えば http://www.example.com/ へリクエストがあったときに http://www.example.com/index.html が存在するか調べ、存在した場合はクライアントへ返します。

DirectoryIndex ディレクティブには複数のファイル名を指定できます。複数指定する場合はスペースで区切って続けて記述してください。

DirectoryIndex index.html index.php index.htm

複数記述した場合、記述された順番にファイルが存在するかどうかを調べ、存在したファイルが見つかればそのファイルを返します。上記の場合は先に index.html を探し、見つからなかった場合は index.php を探し、最後に index.htm を探します。

リクエストがあったディレクトリとは別のディレクトリに含まれるファイルを返すこともできます。その場合はドキュメントルートからのパス付きでファイルを指定します。

DirectoryIndex index.html index.php /sub/sorry.html

上記の場合は、リクエストのあったディレクトリに index.html 、 index.php と順にファイルを探し、どちらも見つからなかった場合は /sub/sorry.html ファイルをクライアントへ返します。

httpd.conファイルでの記述

httpd.conf ファイルにはデフォルトで次のように記述されています。

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
  DirectoryIndex index.html
</IfModule>

DirectoryIndex ディレクティブに対して index.html が設定されています。この設定は dir_module モジュールが使用可能になっている場合に有効です。

DirectoryIndexディレクティブで指定したファイルが存在しない場合

DirectoryIndex ディレクティブで設定したファイルがリクエストのあったディレクトリにひとつも存在しない場合、次のいずれかのデータがクライアントへ返されます。 1 つ目はそのディレクトリに対して Option ディレクティブで Indexes が有効になっている場合です。この場合はディレクトリ内のファイルやサブディレクトリの一覧をクライアントへ返します。

DirectoryIndexディレクティブで指定したファイルが存在しない場合(1)

もう 1 つは Option ディレクティブで Indexes が有効になっていない場合です。もしリクエストのあったディレクトリは存在するけれど DirectoryIndex ディレクティブで設定したファイルがひとつも存在しない場合は次のようなエラー画面が表示されます。

DirectoryIndexディレクティブで指定したファイルが存在しない場合(2)

なおディレクトリのリクエストがあった場合に、そのディレクトリが存在しないものだった場合には Option ディレクティブで Indexes が有効になっているかどうかに関わらず 404 Not Found となります。

DirectoryIndexディレクティブで指定したファイルが存在しない場合(3)

httpd.conf ファイルではドキュメントルートのディレクトリに対してデフォルトで次のように記述されています。

<Directory "${SRVROOT}/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks
</Directory>

Option ディレクティブで Indexes が有効になっています。その為、クライアントからディレクトリへのリクエストがあった場合、そのディレクトリ内に DirectoryIndex ディレクティブに設定したファイルが見つからなかった場合はディレクトリに含まれるファイルの一覧を表示します。

※ Option ディレクティブについて詳しくは「Optionsディレクティブ:ディレクトリで使用可能な機能を設定する」を参照されてください。

-- --

Apache の DirectoryIndex ディレクティブを使い、ディレクトリへのリクエストがあった場合にどのファイルを返すのかを設定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。