ディレクトリインデックス制御
Updated / Published
ファイル名が指定されずにディレクトリだけのURIでリクエストされる場合があります。たとえば、http://www.hoge.hoge/etc/
のようにURIの最後にスラッシュ(/
)がある URI にアクセスすると、"etc
" のディレクトリにある index.html
のファイルが呼び出され、http://www.hoge.hoge/etc/index.html
を自動的に参照していることがあります。
これはウェブサーバの管理者が記述した主設定ファイルの httpd.conf によって、予めスラッシュ(/
)で終わる URI にアクセスがあった場合に、index.html
のファイルを代替して呼び出すように設定されているからです。この設定は、DirectoryIndex
ディレクティブを使って、どのファイルを代替で呼び出すかを変更できます。
ディレクトリインデックスファイルの設定
DirectoryIndex top.html
DirectoryIndex
ディレクティブは、スラッシュ(/
)で終わる URIにアクセスがあった場合に代替して呼び出すディレクトリインデックスファイルを指定します。上記の場合、スラッシュ(/
)で終わる URI へアクセスした場合に最初に呼び出されるファイルは自動的に top.html
になり、そのディレクトリに index.html
のファイルがあっても、これは代替して呼び出されるファイルとして定義されているファイルではないため、index.html
を参照するためには、直接 index.html
の URI を指定してファイルにアクセスする必要があります。
ディレクトリインデックスファイルの複数指定
半角スペースをあけて複数記述することで、代替して呼び出すファイルの順番を指定することができます。
DirectoryIndex index.html index.htm index.shtml index.cgi index.php
この例ではスラッシュ(/
)で終わる URI にアクセスがあった場合、サーバは index.html
がなければ index.htm
を代替に、index.htm
がなければ index.shtml
を代替に、index.shtml
がなければ index.cgi
を代替に、index.cgi
がなければ index.php
を代替に順に呼び出すという設定でスラッシュ(/
)で終わる URI にアクセスがあった場合に呼び出すファイルを指定しています。
インデックス表示を禁止する
代替として呼び出し指定されたファイルがすべて見つからなかった場合、Apache では下記のようなディレクトリに置かれているファイルの一覧を表示します。
これは Apache 特有の機能で DirectoryIndex
ディレクティブで指定されたファイルがどれも見つからなかった場合に、上記のようなファイルの一覧(インデックス)を表示します。ここには、そのディレクトリに置いてあるすべてのファイルが表示されてしまうため、不用意に覗かれることはセキュリティ上好ましくないのでインデックスが表示されるのは避けるようにした方が無難です。そこで、DirectoryIndex
ディレクティブで複数指定されているすべての URI がどれも見つからなかった場合は、403 Forbidden
(閲覧禁止)を表すステータスコードを返すように設定しておいた方が安全です。
まず、指定されたファイルが見つからなかった場合に、ファイルの一覧(インデックス)が表示されるのは、Options
ディレクティブによりインデックスの閲覧が許可されているためです。この閲覧を禁止設定にする必要があります。
Options -Indexes
Options
ディレクティブに -Indexes
の値を指定することにより、インデックスの閲覧を禁止し、403 Forbidden
ステータスコードを返すようになります。Options
ディレクティブは、許可するディレクトリオプションを指定するもので、値の Indexes
はスラッシュ(/
)で終わるディレクトリへリクエストがあった際にデフォルトで表示するように指定されたファイルが見つからなかった場合にディレクトリのファイル一覧を表示する命令です。この Indexes
に "+
" か "-
" の記号を前置することで標準からの差分を設定することができます。