Исключить одну папку в защищенном каталоге 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>