Go to information

ディレクトリ制御

Apache を利用しているウェブサーバーでは 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 でのディレクトリ一覧表示例

これは Apache 特有の機能で DirectoryIndexディレクティブで指定されたファイルがどれも見つからなかった場合に、上記のようなファイルの一覧(インデックス)を表示します。ここには、そのディレクトリに置いてあるすべてのファイルが表示されてしまうため、不用意に覗かれることはセキュリティ上好ましくないのでインデックスが表示されるのは避けるようにした方が無難です。そこで、DirectoryIndexディレクティブで複数指定されているすべての URI がどれも見つからなかった場合は、403 Forbidden(閲覧禁止)を表すステータスコードを返すように設定しておいた方が安全です。

インデックス表示を禁止する

まず、指定されたファイルが見つからなかった場合に、ファイルの一覧(インデックス)が表示されるのは、Optionsディレクティブによりインデックスの閲覧が許可されているためです。このため、この閲覧を禁止設定にする必要があります。

Options -Indexes

Optionsディレクティブに -Indexes の値を指定することにより、インデックスの閲覧を禁止し、403 Forbiddenステータスコードを返すようになります。Optionsディレクティブは、許可するディレクトリオプションを指定するもので、値の Indexes はスラッシュ(/)で終わるディレクトリへリクエストがあった際にデフォルトで表示するように指定されたファイルが見つからなかった場合にディレクトリのファイル一覧を表示する命令です。この Indexes に "+" か "-" の記号を前置することで標準からの差分を設定することができます。

現在位置
  1. W3G
  2. Others
  3. .htaccess
  4. ディレクトリ制御
ナビゲーション
ステータス情報
作者
上田 遼
公開
2006-05-03T20:59:42+09:00
更新
2008-12-29T04:19:16+09:00
URI
http://w3g.jp/others/htaccess/directory_control
検索