У меня есть правило, которое применяется к моей конфигурации Apache httpd.conf, которое выглядит так:
<DirectoryMatch "^/.*/\..*/">
Order deny,allow
Deny from all
</DirectoryMatch>
Он блокирует доступ к скрытым каталогам, таким как .git, в нашем корневом веб-каталоге. Однако используемое нами веб-приложение (Magento) использует подкаталог .thumbs в каталоге мультимедиа, который должен быть общедоступным.
У меня есть правило, которое работает в .htaccess и явно запрещает доступ к скрытым каталогам:
RewriteRule (^\.|/\.) - [F]
Но я не могу найти позволяет версия указанной выше строки.
Контекст: причина, по которой мы не изменяем файл конфигурации Apache httpd.conf, заключается в том, что мы надеемся решить эту проблему с помощью только развертывания на основе кода и побочного шага к необходимости перезагружать конфигурацию веб-сервера в каждой среде жизненного цикла.
... не изменять Apache
httpd.conf
Файл конфигурации
tl; dr Добавьте следующее в .htaccess
файл в каталоге, к которому вы хотите разрешить доступ, т.е. /media/.thumbs/.htaccess
:
<Files "*">
Order deny,allow
Allow from all
</Files>
Что противоположно [F] (т.е. запретить) ...
Кажется, вы задаете неправильный вопрос. Вам нужна противоположность Deny
(mod_authz_host) - именно это нужно переопределить. (Однако существуют дополнительные сложности с порядком, в котором обрабатываются директивы, поэтому читайте дальше ...)
(В стороне: В F
flag - это способ mod_rewrite для отправки ответа 403 Forbidden, на самом деле нет напротив этого, кроме как избежать отправки 403 Forbidden! Если запрос уже заблокирован с помощью mod_authz_host (т.е. Deny
), то вы не можете "отменить" это с помощью mod_rewrite.)
Противоположно Deny
является Allow
в mod_authz_host. Например, в /media/.thumbs/.htaccess
файл, вы можете сделать это:
Order deny,allow
Allow from all
Однако это не отменяет <DirectoryMatch>
контейнер в конфигурации сервера, потому что <DirectoryMatch>
контейнеры обрабатываются после .htaccess
. Если, однако, вы использовали (не регулярное выражение) <Directory>
контейнер в конфигурации сервера вместо <DirectoryMatch>
, то это переопределило бы конфигурацию сервера, потому что <Directory>
контейнеры и .htaccess
обрабатываются на то же время с участием .htaccess
преобладающий <Directory>
контейнеры.
ОДНАКО вы все равно можете разрешить доступ ко всем файлы в пределах /media/.thumbs
подкаталог, обернув указанное выше Allow
директивы в <Files>
контейнер (в том же .htaccess
файл). Например:
<Files "*">
Order deny,allow
Allow from all
</Files>
Обернув эти директивы в <Files>
контейнер вы меняете порядок обработки. Важно то, что <Files>
контейнеры обрабатываются после <DirectoryMatch>
контейнеров (несмотря на то, что он появился в .htaccess
файл), поэтому теперь он отменяет <DirectoryMatch>
контейнер в конфигурации сервера.
Из документы Apache 2.2 о том, как объединяются разделы:
Порядок объединения:
<Directory>
(кроме регулярных выражений) и.htaccess
выполняется одновременно (с .htaccess, если разрешено, переопределение<Directory>
)<DirectoryMatch>
(и<Directory ~>
)<Files>
и<FilesMatch>
сделано одновременно<Location>
и<LocationMatch>
сделано одновременно
Вы можете попробовать это:
RewriteCond %{REQUEST_FILENAME} !"path to.thumbs sub-directory"
RewriteRule (^\.|/\.) - [F]
Чтобы заблокировать доступ ко всем папкам, кроме указанной папки.
1º Не используйте .htaccess
2º Добавьте регулярное выражение «отрицательный просмотр вперед» перед фактическим шаблоном, чтобы сделать исключение:
<DirectoryMatch ^/(?!\.thumbs).*/\..*/>
Order deny,allow
Deny from all
</DirectoryMatch>