※Qiitaからの移行記事となります
Apacheのconfにはデフォルトで次のような記述があり、通常は.htaccessなどが見えてしまうことはありませんが、設定によっては.htaccessファイルが丸見えになってしまう(FilesやFilesMatchの設定が無視される)場合があります。
<Files ".ht*"> Require all denied </Files>
例えば、次のような設定が行われていると、FilesやFilesMatchの設定が評価されず、.htaccessが見えてしまう原因となります。
<Location "/"> <RequireAll> Require all granted Require not ip 192.168.0.0/24 Require not ip 192.168.1.0/24 Require not ip 192.168.2.0/24 </RequireAll> <DirectoryMatch>
原因
ディレクティブには優先順があります。
<Directory> < <Files> < <Location>
上記のように種類の異なるセクションが混在し、かつセクション同士で一部あるいは全部の条件が重複する場合は、優先度の高いセクションの内容が評価されます。つまり、<Files>
よりも<Location "/">
の優先度が高いため、<Files>
が評価されない問題が発生します。
そして、設定は記述順(上から順)に評価されるとは限らず、<Files>
を<Location>
の前に持ってこようが、後ろに持ってこようが結果は変わりません。
対応
Locationを使わず、DirectoryやDirectoryMatchを使います。 Locationはトラブルになりやすいため、なるべくLocationを使用しない運用とすることが望ましいといえます。
<Directory "/var/www/html"> <RequireAll> Require all granted Require not ip 192.168.0.0/24 Require not ip 192.168.1.0/24 Require not ip 192.168.2.0/24 </RequireAll> <Directory>