У меня есть сервер Apache с защищенным паролем веб-каталогом. В этом каталоге есть подкаталог, для которого требуется другой пароль, но любой, кто может получить доступ к подкаталогу, также должен иметь доступ к родительскому каталогу. То есть:
Итак, я установил это в конфигурации Apache:
<Directory "/stuff">
[AuthType Basic, AuthName, etc.]
Require user stuff
Require user admin
</Directory>
<Directory "/stuff/admin">
[AuthType Basic, AuthName, etc.]
Require user admin
</Directory>
Это работает в том смысле, что я могу перейти к / stuff и войти в систему как «admin» или «stuff». Однако страницы в / stuff / admin ссылаются на некоторые изображения из родительского каталога. Я обнаружил, что когда я перехожу прямо к / stuff / admin и вхожу в систему как «admin», браузер все равно запрашивает у меня другой пароль для загрузки этих изображений. (Я знаю, что это приглашение для / stuff, потому что значение AuthName другое.)
Как мне избежать этого и позволить пользователю, имеющему доступ к / stuff / admin, войти в систему только один раз (как «admin»), а не дважды?
Проблема оказалась в другом AuthName значение для двух каталогов. Я думал, что его единственная цель - предоставить пользователю содержательную подсказку. Прочитав документация опять же, оказывается, что у него другая цель: браузер автоматически пробует те же учетные данные для каталогов с тем же AuthName.
Итак, в моем случае произошло следующее: после аутентификации / stuff / admin браузер запросит / вещи / что-то еще, он получит ответ «401 Unauthorized», но даже не будет пытаться использовать те же учетные данные. После того, как я изменил AuthName на то же самое, он автоматически ответил на 401, повторив попытку с именем пользователя «admin», с которым я ранее аутентифицировался, что сработало.
Вы пытались изменить порядок строф в вашем htaccess, чтобы сначала был конкретный случай? Это может повлиять на сопоставление и решить вашу проблему с двойным запросом.
Еще нужно проверить, можете ли вы использовать Realms или Groups для упрощения, например, чтобы указать, что несколько контейнеров используют один и тот же сервер аутентификации.
Это (AAA) отличается между Apache и Apache2, поэтому проверьте, что у вас есть. Вот оба набора документов:
http://httpd.apache.org/docs/1.3/howto/auth.html http://httpd.apache.org/docs/2.2/howto/auth.html
hth,
Адрик
Я считаю, что когда вы перечисляете вещи в отдельные строки, есть подразумеваемое «и». Попробуйте перечислить пользователей в той же строке для подразумеваемого «или»:
<Directory "/stuff">
[AuthType Basic, AuthName, etc.]
Require user stuff admin
</Directory>
Я не пробовал, но сработает ли изменить их оба, чтобы требовать действительного пользователя и указать admin .htaccess на файл группы .htpasswd, который был подмножеством admin, и базовый каталог .htaccess на файл .htpasswd с больший суперсет?