Apacheのインストールが可能な限り安全であることを確認するためにさまざまなことをテストしていたので、ファイルのディレクトリリストが表示されるかどうかを確認することにしました。そこで、テストディレクトリを作成し、いくつかのファイルを追加しました。
/var/www/domain/public_html/test
/var/www/domain/public_html/test/a.txt
/var/www/domain/public_html/test/b.txt
驚いたことに、そのテストディレクトリに移動したときに、a.txt
とb.txt
がリストされています。
セットアップファイルに戻ってOptions -Indexes
のセットアップがあったので、ファイルa.txt
およびb.txt
が表示されるのはなぜかと思っていました
私のセットアップだけがこのように見えました:
<VirtualHost domain:80>
...
Options -Indexes
...
</VirtualHost>
Optionsコマンドのドキュメント を見ると、次のことが明確に示されています:
Context: server config, virtual Host, directory, .htaccess
それでも、その特定のオプションをVirtualHost
レベルに直接配置しても、何も実行されません。
Options
タグ内のDirectory
を移動するように設定を変更しましたが、動作します。
<VirtualHost domain:80>
...
<Directory "/var/www/domain/public_html/">
Options -Indexes
</Directory>
...
</VirtualHost>
それはただの大きな落とし穴!?オフにするオプションをオフにしないようにするために知っておく必要があること
VirtualHostコンテナでOptions -Indexes
を直接使用できます。ただし、ここで定義したときに目的の効果が得られるかどうかは、Options
がサーバー構成の他の場所で定義されているかどうかによって異なります。たとえば、anywhere else(アクセスされるディレクトリに関連する)定義された<Directory>
セクションは、リクエストの後半で処理されるため、これをオーバーライドする可能性があります。
VirtualHostコンテナで直接定義されたOptions
は、サーバー構成で直接定義されたOptions
のみをオーバーライドします。
Options
ディレクティブは「特定のディレクトリで使用可能なサーバー機能を制御する」ため、<Directory>
コンテナでこれを表示するのが一般的です。 Options
をサーバーconfig/VirtualHostで直接定義することは、base defaultの定義にのみ適しています。ただし、サーバー全体を制御するサーバー構成の<Directory />
コンテナに設定されたデフォルトを確認するのが一般的です。ここでOptions
ディレクティブは、VirtualHostで直接宣言されたOptions
をオーバーライドします。 (「サーバーのデフォルト」は+
/-
プレフィックスで宣言しないでください。したがって、mergedではありません。)
質問でリンクされているApacheドキュメントは、Apache 2.4を参照しています。 Apache 2.4では、Indexes
はデフォルトでは有効になっていません(default:Options FollowSymLinks
)。したがって、サーバーでこれを有効にするには、明示的に定義する必要がありますどこか。
Apache 2.2では、Indexes
はデフォルトで有効になっています(デフォルト:Options All
)が、VirtualHostコンテナではオーバーライド可能です(そうでない場合)他の場所で定義されています)。
私は過去にこの問題に遭遇しました。厳密に言えば、ヘルプドキュメントに基づいて、options -indexes
ディレクティブはメインvhostブロックで動作するはずですが、私の経験では、ディレクトリインデックスの無効化を処理するときにこのディレクティブを使用する方法で利用可能なすべての例に基づいて、ディレクティブは<Directory ""></Directory>
vhostファイル内のブロック。