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>