У меня настроена структура веб-сайта следующим образом, и я пытаюсь организовать уровни доступа для каждого, но без указания <Directory>
так как это требует, чтобы структура была исправлена (иначе говоря, если я скопирую это на другой сайт, во вложенную папку, потребуется отредактировать весь .htaccess в новое место).
Я пробовал реализовать новую схему директив Apache2.4 (ish):
/etc/apache2/conf-enabled/security.conf
... more stuff above ...
<Directory />
AllowOverride All
Require all denied
</Directory>
... more stuff below ...
И добавив Require all allowed
к .htaccess
в корне приложения, при добавлении Require all denied
к .htaccess
в папках, к которым я хочу запретить доступ.
Проблема в Require all denied
кажется, абсолютно ничего не делает. Я видел ссылку на использование mod_auth_compat
или любую другую библиотеку, но, похоже, она требуется только для более старых версий apache (v2.3).
Я использую Apache 2.4 в Debian 8.
Раньше я поставлял:
Order Allow, Deny
Deny from all
А затем поместите следующее в папки, требующие доступа:
Allow from all
.. и где мне нужно разрешить доступ только к определенному типу файлов,
<FilesMatch "\.(jpg|jpeg|gif|png|bmp|svg|css|less|sass|scss|js|ttf|woff|woff2|eot)$">
Allow from all
</FilesMatch>
Согласно документации apache, смешивание старых и новых объявлений может привести к неожиданным результатам, поэтому я использую только новые объявления. Нет заблудших .htaccess
файлы или *.conf
файлы загружаются с использованием старого формата декларации разрешений - так это должно работать?
Учитывая структуру папок, которую я выложил, и то, что загружено в '/etc/apache2/conf-enabled/security.conf' (поскольку именно там "корневое" объявление для AllowOverride [похоже, не работает при указании AllowOverride All
внутри того же формата объявления на веб-сайтах conf (000-default.conf)], может ли кто-нибудь дать какие-то рекомендации или, желательно, рабочее решение этой проблемы.
См. Руководство по обновлению с примерами на Require
Директива: https://httpd.apache.org/docs/trunk/en/upgrading.html
Deny from all
сейчас Require all denied
Allow from all
сейчас Require all granted
Поворот сюжета: Apache 2.4 по умолчанию не предоставляет доступ ни к одному каталогу, и порядок оценки изменился.
Было обычным делом блокировать доступ к файловой системе в apache 2.2 с помощью Directory /
+ Require all denied
как ты написал. Его следует удалить сейчас. Это приведет к обратным результатам, если когда-либо заменит разрешения в подкаталогах.
См. Документацию по объединению ограничений аутентификации. На практике это становится безумно сложным. https://httpd.apache.org/docs/trunk/en/mod/mod_authz_core.html#authmerging
В Require all granted
в /app
оценивается до Require all denied
в /app/lib
подкаталог. Похоже, что apache предоставляет доступ после выполнения первого разрешающего правила, поэтому он разрешен. Все дерево было открыто директивой для родителя, и вы ничего не можете с этим поделать.
Я советую не смешивать публичный и частный контент. На практике это совершенно неосуществимо. Если он подан, значит, его нужно подавать.