カテゴリー
ウェブ関連

ディレクトリへのアクセスで index of/を表示させない

レンタルサーバーを使用していると、ディレクトリに index.html がない場合、ファイル一覧が表示されることがあります。これを防ぐ方法として、空の index.html ファイルを設置するか、.htaccess ファイルを使用してアクセスを制限する方法があります。これにより、セキュリティリスクを減らし、不要なファイル一覧表示を防止できます。

レンタルサーバーを利用していると、リクエストされたディレクトリに index.html などのファイルが存在しない場合、ブラウザで index of/ という形でディレクトリ内のファイル一覧が表示されることがあります。

これは、Apacheサーバーのデフォルト設定によるものですが、セキュリティの観点から見ても望ましくありません。
以下では、簡単にできる対処方法を紹介します。

専用・ VPS サーバーなどのホスティングサービスや自宅サーバーなどでしたら、httpd.confを直接編集することで変更できます。
しかし、多くはレンタルサーバーを使用されていることと思いますので、それ以外の方法での対処を紹介します。

空の index.html を置く

index.html が存在しないディレクトリに、空の index.html ファイルをアップロードする方法です。この方法はサーバーの動作に影響を与えないため、誰でも簡単に設定できます。
アクセスされた場合、真っ白なページが表示され、ディレクトリの内容が見えなくなります。

デメリットとして、すべてのディレクトリにこのファイルを配置する必要があり、手間がかかります。

.htaccess でアクセスを制限する

次は.htaccess を使って index.html が存在しないディレクトリへのアクセスを制限する方法です。

通常の Apache サーバーであれば、下の1行で制限できます。

Options -Indexes

ただし、一部のレンタルサーバーでは、この Options コマンドが制限されている場合があります。
その場合は以下のコードを .htaccess に追加して、特定のファイルがない場合に403エラーを返すように設定することが可能です。
もしOptions -Indexesを使用した際に 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
profile image

執筆:R3098

WEB サービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などプラグイン開発も行っています。悩めるサイト運営者の無料相談受付けます!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。