Мне нужно ограничить доступ по паролю к моему веб-корневому тестовому серверу Apache (то есть http: // localhost ), но разрешить доступ к подпапкам (то есть: http: // localhost / testsite [ 111])
Я создал .htpasswd и .htaccess и поместил .htaccess в корень сети (http: // localhost), поэтому при попытке доступа к корню сети он запрашивает пользователя и пароль, но то же самое происходит в подпапках (т. е. при попытке доступа к http: // localhost / testite )
Я хочу, чтобы у меня запрашивали пароль в веб-корне, но не в подпапках.
Это возможно?
кажется, что вы сказали Apache требовать пароль для вашего веб-корня, но вы сделали Apache не требующим его для всех других каталогов?
Внутри вашего .htaccess (или в httpd.conf они выполняют ту же работу) у вас, вероятно, есть что-то похожее на то, что ниже (добавьте вставную ссылку в ваш файл .htaccess, и я могу сделать это точно):
<Directory "/www/private">
Order allow,deny
Allow from all
Options Indexes
AuthType Basic
AuthName "Private Access"
AuthUserFile "/www/private/.htpasswd"
Require valid-user
</Directory>
Но это будет применяться ко всем каталогам по этому пути, а также. В противном случае вам нужно будет явно указать Apache.
<Directory "/var/private/subdir">
Satisfy any
</Directory>
Вы можете использовать регулярные выражения с <DirectoryMatch "regex">
, чтобы обобщить это, только не забудьте защититься от asdf.com/subdir/../
выражений.
ОБНОВЛЕНИЕ: Стоит также упомянуть, что, хотя большая часть документации уже содержит директивы <Directory[Match]>
, существуют также директивы <Location[Match]>
, которые полезны в случае символических ссылок в базовой файловой системе.
В Apache 2.4 мы можем использовать директиву LocationMatch и регулярное выражение.
# Require a password to access to the root path with or without a forward slash
<LocationMatch "^/?$">
Order Allow,Deny
Options Indexes
AuthType Basic
AuthName "Private Access"
AuthUserFile "/www/private/.htpasswd"
Require valid-user
</LocationMatch>