Исключить одну папку в защищенном каталоге htaccess
У меня есть каталог, защищенный htaccess. Вот код, который я использую сейчас:
AuthName "Test Area"
Require valid-user
AuthUserFile "/***/.htpasswd"
AuthType basic
Это прекрасно работает. Однако теперь у меня есть каталог внутри этой папки, который я хотел бы разрешить любому пользователю доступ, но я не уверен, как это сделать.
Я знаю, что можно просто перемещать файлы за пределами защищенного каталога, но чтобы сделать длинную историю коротким, папка должна оставаться внутри защищенной папки, но быть доступной для всех.
Как я могу ограничить доступ к папке, но разрешить доступ к подпапке?
Ответы
Ответ 1
В соответствии с этой статьей вы можете выполнить это, используя SetEnvIf
. Вы сопоставляете каждую из папок и файлов, к которым вы хотите получить большой доступ, и определяете для них переменную среды "allow". Затем вы добавляете условие, позволяющее получить доступ, если эта переменная среды присутствует.
Вам нужно добавить следующие директивы в ваш .htaccess.
SetEnvIf Request_URI "(path/to/directory/)$" allow
SetEnvIf Request_URI "(path/to/file\.php)$" allow
Order allow,deny
Allow from env=allow
Satisfy any
Ответ 2
Просто создайте файл .htaccess в подкаталоге с содержимым:
Satisfy any
Ответ 3
Нет необходимости создавать .htaccess в подкаталоге.
Просто создайте столько переменных, сколько вам нужно, с директивой SetEnvIf и убедитесь, что имя файла или пути, которое вы хотите allw/deny, является частью регулярного выражения URI, которое вы передаете SetEnvIf, точно так же, как @Sumurai8, но установите регулярное выражение в соответствии с вашими потребностями, поскольку URI должен начинаться/заканчиваться/содержать набор символов............
Ответ 4
Принятый ответ, похоже, не работает с новыми версиями Apache, поскольку он прекратил работу, как только обновления Apache были развернуты на некоторых моих серверах клиентов.
Я рекомендую следующий подход:
AuthType Basic
AuthName "NO PUBLIC ACCESS"
AuthUserFile /xxx/.htpasswd
SetEnvIf REQUEST_URI "(path/to/directory/)$" ALLOW
<RequireAny>
Require env ALLOW
Require valid-user
</RequireAny>