Исключить одну папку в защищенном каталоге htaccess - PullRequest
21 голосов
/ 02 января 2012

У меня есть каталог, защищенный htaccess. Вот код, который я использую сейчас:

AuthName "Test Area"
Require valid-user
AuthUserFile "/***/.htpasswd"
AuthType basic

Это работает нормально. Тем не менее, у меня теперь есть каталог внутри этой папки, к которому я хотел бы разрешить доступ любому, но не уверен, как это сделать.

Я знаю, что можно просто переместить файлы за пределы защищенного каталога, но, если коротко, папка должна оставаться внутри защищенной папки, но быть доступной для всех.

Как я могу ограничить доступ к папке, но разрешить доступ к подпапке?

Ответы [ 4 ]

37 голосов
/ 25 января 2014

Просто создайте файл .htaccess в подкаталоге с содержанием:

Satisfy any

15 голосов
/ 02 января 2012

Согласно этой статье вы можете сделать это, используя 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
6 голосов
/ 12 января 2018

Принятый ответ, кажется, не работает с новыми версиями 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>
0 голосов
/ 16 декабря 2015

Нет необходимости создавать .htaccess в подкаталоге.

Просто создайте столько переменных, сколько вам нужно с помощью директивы SetEnvIf , и убедитесь, что имя файла или пути, которое вы хотите указать allw / deny, является частью регулярного выражения URI, которое вы передаете SetEnvIf точно так же, как сказал @ Sumurai8, но задайте регулярное выражение в соответствии со своими потребностями, поскольку URI должен начинаться / заканчиваться / содержать набор символов ............

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...