Как указать Apache не перезаписывать LocationMatch и «Требовать все отклонено»?

у меня есть следующая директива, установленная в 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>

Теперь, когда я вхожу в систему, полностью игнорируется . Я попробовал:

<Location />
    ...
    Satisfy all
</Location>

.. безуспешно: (

1
задан 11 October 2016 в 16:01
1 ответ

Проблема действительно возникает, как указывает @HBruijn, в том, как Apache объединяет различные разделы, и в трудностях, возникающих из-за смешивания ограничений на основе файловой системы (таких как и < Файлы> ) и пути на основе URI (например, . Безопаснее и проще использовать одно, а не оба вместе, потому что одно может полностью перекрыть другое.

Так, например, в 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, на самом деле есть предупреждение, чтобы не пытаться использовать блокирует доступ к файлам в файловой системе в разделе What to use When .

2
ответ дан 3 December 2019 в 20:33

Теги

Похожие вопросы