Apache: ディレクトリ一覧を表示する方法

Apache HTTPサーバーでディレクトリ内のファイルおよびサブディレクトリのリストを表示するには、そのディレクトリでOptions +Indexesを設定します。アクセス権が付与され、デフォルトのインデックスファイルが存在せず、mod_autoindexが有効になっている場合にリストが生成されます。

リストが表示される条件

Apache 2.4 でディレクトリ URL がリクエストされると、まず DirectoryIndex で指定されたファイルを探します。たとえば、index.html が存在する場合、そのファイルが通常表示されます。ファイルが存在せず、Indexes が有効になっている場合、mod_autoindex がリストを作成することができます。詳細な動作については、Apache の DirectoryIndex の説明 および mod_autoindex ドキュメント を参照してください。

リスト表示の設定はアクセス権限を付与するものではありません。アクセスが拒否されたディレクトリや Apache が読み取れないパスでは、リストは表示されません。また、403 Forbidden は認証やファイルシステムの権限などさまざまな理由で発生する可能性があるため、403 が表示されるからといってリスト表示を有効にすべきではありません。

設定する前に確認してください

  • リスティングやファイルを公開できる専用のディレクトリを準備します。設定ファイル、バックアップ、個人情報など、公開すべきでない資料は置かないでください。
  • 設定するサイトのバーチャルホストと実際のファイルパスを確認します。以下の例は、サイトのドキュメントルートが/var/www/htmlで、その下の公開ディレクトリがdownloadsの場合のUbuntu Apache 2.4用です。実際の環境パスとURLに置き換えてください。
  • 既存の設定をバックアップし、サイトを管理しApacheをリロードする権限があることを確認します。本番サーバーの場合は、まずテスト環境で確認してください。

ファイルが一覧に表示されなくても、ファイルのURLを直接知っていればアクセスできる可能性があります。一覧から名前を隠すことは、ファイルアクセスをブロックする権限の代わりにはなりません。

仮想ホストの特定のディレクトリに適用する

Ubuntuでは、アクティブなサイトの設定は通常/etc/apache2/sites-available/の下のファイルにあります。サイトの仮想ホスト設定に次のブロックを追加するか、既存のパス設定を修正します。アクセス制限のあるディレクトリにむやみに公開権限を追加しないでください。

<Directory "/var/www/html/downloads">
    Options +Indexes
    Require all granted
</Directory>

Options +Indexes は、継承されたオプションにディレクトリの一覧表示を追加します。Require all granted はこのパスへのアクセスを許可するため、公開を意図したディレクトリでのみ使用してください。実際の適用範囲は、他の設定セクションやサブディレクトリの設定によって異なる場合があります。オプションの継承およびマージのルールは、Apache Options ディレクティブ で確認できます。

設定を保存した後、Ubuntu で構文を確認してください。Syntax OK が表示された場合は、設定をリロードします。エラーが発生した場合は、パスやタイプミスを修正し、確認が成功するまでリロードしないでください。

sudo apache2ctl configtest
sudo systemctl reload apache2

Ubuntu 以外のディストリビューションでは、設定ファイルの場所やサービス名が異なる場合があります。また、構文チェックおよびリロードコマンドについては、該当ディストリビューションの指示に従ってください。

ディレクトリリストとアクセス範囲の確認

  1. ターゲットディレクトリに公開可能なテストファイルを置き、指定されたインデックスファイルが存在しないことを確認します。
  2. ブラウザでディレクトリのURLを開きます。上記の例では、サーバーアドレスがhttps://example.comの場合、https://example.com/downloads/がサンプルURLになります。実際のドメインに置き換えてください。
  3. テストファイルがリストに表示されるか確認し、リンクを開いてアクセス範囲が意図した設定と一致していることを確認します。設定はサブディレクトリに継承される場合があるため、公開アクセスの範囲も確認してください。

リストの代わりにページが表示される場合は、DirectoryIndexファイルや他のハンドラ/リダイレクトがあるか確認してください。403エラーの場合は、アクセス制限、ディレクトリの権限、およびエラーログのインデックス設定を確認してください。また、apache2ctl -Mを使用してautoindexモジュールが有効かどうか確認することもできます。パスが間違っている場合、404エラーが発生する可能性があります。

.htaccessを使用する場合

サーバー管理者がディレクトリの.htaccessでOptionsの変更を許可している場合は、そのファイルに次の行を追加することもできます。親設定のAllowOverrideがこのオプションを許可していない場合、正常に動作しないか、サーバーエラーが発生する可能性があるため、管理者に確認してください。

Options +Indexes

サーバー設定にアクセスできる場合、Apacheは通常、メインの設定ファイルの使用を推奨しています。Apacheの.htaccessガイドで該当する条件を確認してください。

リストの表示を停止するには

指定されたパスにOptions -Indexesを設定するか、変更前の設定を復元し、その後構文を確認してApacheをリロードしてください。.htaccessに追加した場合は、その行を削除するか、許可されていればOptions -Indexesに変更してください。継承された設定が存在する可能性があるため、変更後にディレクトリURLを再度確認してください。

リストをオフにするだけでは、すでに知られているファイルURLへのアクセスはブロックされません。ファイル自体を保護するには、別のアクセス制御を適用し、許可されていないユーザーが実際にブロックされているか確認してください。