Я использую базовую HTTP-аутентификацию apache для управления доступом, однако я хочу контролировать только один уровень доступа к каталогу, то есть я хочу, чтобы аутентифицировался только каталог a, но не дочерние элементы a (например, a / b), возможно ли это ?
<Location /a/> Options -Indexes Order Deny,Allow Allow from all AuthType Basic AuthName "Members Only" AuthUserFile /home/xxxx/.htpasswd require valid-user </Location>
AFAIK это невозможно. Я только что попробовал его как в httpd.conf, так и в файле .htaccess, и он не работает.
Это связано с тем, что в целом такая настройка не имеет смысла - точка требования аутентификации для каталога заключается в защите области вашего сайта, и подкаталоги защищенного каталога будут считаться частью этой защищенной области.
Область действия HTTP Basic auth - для каждого домена - если вам требуется аутентификация для подкаталога, те же учетные данные будут отправлены в последующем запросе в каталог более высокого уровня. Это означает, что они также будут отправляться во всех запросах для каталога более низкого уровня.
Это можно было бы реализовать, используя некоторую пользовательскую логику в сценариях на стороне сервера (например, PHP), но лучшим решением было бы переосмыслить структуру каталогов. Не должно быть причин требовать аутентификации для каталога более высокого уровня, но не для каталогов более низкого уровня - вам необходимо переместить контент в ваших каталогах более низкого уровня в область открытого доступа сайта, а защищенная паролем область должна содержать только контент это должно быть приватным.
В качестве побочного примечания - базовая аутентификация HTTP через HTTP настолько небезопасна, что почти Бессмысленно использовать его вообще - если у вас есть какой-то контент, который вы действительно хотите защитить, подумайте об использовании Digest auth. Вы можете использовать HTTPS, чтобы предотвратить раскрытие учетных данных обычной проверки подлинности, а если вы используете HTTPS, вы также можете использовать проверку подлинности сертификата клиента для обеспечения максимальной безопасности.
Обратите внимание, что я не пробовал это, и я не гуру apache, но если предположить, что DaveRandom прав, моей следующей попыткой было бы использовать файл .htaccess в каталоге / A /, а затем использовать перезапись URL, чтобы указать что-то на / A / child, с логикой, что / A / child никогда не вызовет обход каталога в / A / для чтения файла .htaccess, поскольку интерпретация каталога происходит позже в процессе.
Конечно, если это сработает, вероятно, это ошибка, и она будет исправлена.