ディレクトリへのアクセスでindex of/を表示させない
2022/02/28
2013/06/08

レンタルサーバではリクエストされたディレクトリにindex.htmlなどブラウザで表示させるべき内容がない場合、index of/という形でディレクトリ内のファイル一覧表示される場合があります。
これは多くのサーバで採用されているApacheのデフォルト仕様ですが、重要なファイルを入れていなければ、直接的な問題はないとはいえ、ディレクトリ内のファイル一覧が丸見えというのはセキュリティ上の観点で望ましくありません。
専用・VPSサーバや自宅サーバなどでしたら、httpd.confを編集することで変更できます。しかし、多くはレンタルサーバを使用されていることと思いますので、それ以外の方法での対処方法を紹介します。
空のindex.htmlを置く
index.htmlが存在しないディレクトリに対して中身のない空のindex.htmlファイル(中身が何もない)をアップロードし、リクエストがあった場合はそれを表示させるという方法です。
該当ディレクトリにアクセスしても真っ白な画面が表示されるだけでディレクトリの中身を見ることはできません。だれにでも簡単にできて、後に紹介する.htaccessのようにサーバの動作にも影響を与えない反面、index.htmlがないディレクトリすべてにアップロードが必要という煩わしさがあります。
.htaccessでアクセスを制限する
次は.htaccessを使ってindex.htmlが存在しないディレクトリへのアクセスを制限する方法です。
通常のApacheサーバであれば、下の1行で制限できます。
Options -Indexes
ただし、Optionsの使用が制限されているサーバではInternal Server Errorとなってしまいます。ちなみに有名どころではさくらインターネットではOptionsが使えません。
サーバによっても異なると思いますが、Internal Server Errorが表示される場合はOptionsが許可されていないと思われますので、下記をお試しください。
これは「*.html」・「*.htm」・「*.php」を規定ファイルとして定義するというもので、該当ディレクトリへのアクセスにおいて、これらのファイルがなかった場合にはindex of/は表示されず、403エラーとなります。
<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>
DirectoryIndex index.html .ht
DirectoryIndex index.htm .ht
DirectoryIndex index.php .ht