У меня установлена следующая директива security.conf
чтобы Apache не обслуживал скрытые файлы и каталоги.
<LocationMatch ^(.*/)\..*>
Require all denied
</LocationMatch>
В 000-default.conf
это следующая директива для защиты всего сайта через HTTP-аутентификацию.
<Location />
AuthUserFile /var/www/site/.htpasswd
AuthName "Restricted Area"
AuthType Basic
Require valid-user
</Location>
Теперь, когда я вошел в систему <LocationMatch ^(.*/)\..*>
полностью игнорируется. Я пробовал это с:
<Location />
...
Satisfy all
</Location>
.. безуспешно :(
Проблема действительно возникает, как указывает @HBruijn, в том, как Apache объединяет разные разделы, и в трудностях, возникающих из-за смешивания ограничений на основе файловой системы (например, <Directory>
и <Files>
) и на основе пути URI (например, <Location>
. Безопаснее и проще использовать одно, а не то и другое вместе, потому что одно может полностью перекрыть другое.
Так, например, в Apache v2.4, если вы используете Directory
вместо того Location
в приведенном выше примере и используйте FilesMatch
запретить доступ к файлам с ведущими .
, он должен работать. Но если вы попытаетесь использовать Location для обоих, этого не произойдет.
Пример:
<FilesMatch "^\..+$">
require all denied
</FilesMatch>
<Directory /path/to/your/docroot>
AuthUserFile /var/www/site/.htpasswd
AuthName "Restricted Area"
AuthType Basic
Require valid-user
</Directory>
Обратите внимание, что на странице @HBruijn на самом деле есть предупреждение, чтобы не пытаться использовать <Location>
блоки для ограничения доступа к файлам в файловой системе под Что использовать Когда раздел.