apache2 Options Indexes が効かない? ディレクトリ一覧表示を制御する Test Pageを表示させない設定など

WEBサーバーといえば、とりあえずapache2(apache)だ。
まるむしは、バーチャルホスト機能を使い複数のアドレスを稼動させている。
apache導入時のデフォルト設定では、ホームのディレクトリに、index.htmlなどのインデックスファイルが存在しない場合、ディレクトリの一覧が表示されてしまう。
※どのファイルをインデックスファイルとして認識するかは、
 /etc/httpd/conf/httpd.conf の
 DirectoryIndex index.html index.html.var ここできまる。
 index.phpなどを使う場合は、ここを書き換えるなり追記するなりすればよいことになる。

 まぁこんな解説はいたるところに書かれているのでさておき…
当然のことながらこのままでは中身が丸見えになってしまって危険なので、
通常はまずこの機能をOFFに設定するだろう。
 /etc/httpd/conf/httpd.conf の
 Options Indexes ~ の Indexesを削除すればOKだ。
ここまでは良いのだが、バーチャルホストで複数運営していると、特定のサイトではIndexesを有効にしたい場合がある。
ここでなぜかはまってしまったのだ。
バーチャルホストの場合、
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

てな感じで、*でバーチャル名全ユーザーに対して、Indexesが無効になるようなOptionsを定義する。
そして特定のユーザーのみ定義するならその下(後勝ちなので)で
<Directory /home/特定ユーザー/public_html>
AllowOverride FileInfo AuthConfig Limit
Options IndexesSymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

と再定義すればよい訳だ。記述は冗長ではあるが頻繁に触るなら冗長な方が都合が良い。
※+Indexes とか -Indexes などと追加したり外したりと部分的な記述をすることもできる。
とまぁこれで良いはずなのだがなぜかディレクトリの一覧が表示されないのだ。
昔設定したときはこれだけでよかったはずなのだが….
設定を色々変えhttpdを再起動させてと何日も何時間も費やした。(まぁ合間の作業なのでそれほど大袈裟ではないが…^^;)
ふと思い立ち、サブディレクトリにダイレクトにアクセスしていると、
ディレクトリの一覧が表示されているではないか! あああぁぁぁ…
Indexesが効いていないと思っていたがちゃんと効いていたのだ。
とはいえ、そもそもホームのディレクトリが表示されないが悪いのだ!
しかし画面を良く見て考えると、
Forbidden
You don’t have permission to access / on this server.

と出ているのではなく、test pege が表示されている。
要するにIndexファイルが無いのでデフォルトのページが表示されているという状態なのだ。
※apacheを導入してとりあえずアクセスしてみると、「test page」というapacheが用意したデフォルトページが表示される。
どうやら、Options Indexes の設定よりも デフォルトページ表示の設定の方が強いらしい。

この辺の力関係の設定を変えることができるのは調べていないが、
とりあえず問題解決にはこのデフォルトページ表示を行わなければ良いことになりそうだ。
apacheのTest Pageを表示させない設定

表示されているページは、
/var/www/error/noindex.html だ。
もし表示内容をオリジナルのものに変更したいならこれを触ればよい。
そしてこのページを制御しているのが、
/etc/httpd/conf.d/welcome.conf
内容はデフォルトで
<LocationMatch “^/+$”>
Options -Indexes
ErrorDocument 403 /error/noindex.html
</LocationMatch>

となっているので、これを全てコメントアウトして無効にしてしまう。
#<LocationMatch “^/+$”>
#Options -Indexes
#ErrorDocument 403 /error/noindex.html
#</LocationMatch>

httpdのサービスを再起動して確認。
出た! ようやくディレクトリの一覧が出ました。^^
念のため通常(一覧表示したくないその他のユーザーのディレクトリにアクセス)の表示を確認。
Forbidden
You don’t have permission to access / on this server.

OKですね。 デフォルトぺージは表示されませんが、ディレクトリの一覧が見えてしまうこともありません。
ようやく引きずっていた問題が解決しました。

コメント

タイトルとURLをコピーしました