我有一个带有密码保护的 Web 目录的 Apache 服务器。该目录有一个子目录,需要另一个密码,但任何可以访问子目录的人也应该可以访问父目录。那是:
- /stuff - 允许用户“stuff”和“admin”
- /stuff/admin - 只允许用户“admin”
所以我在 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 的用户只登录一次(作为“管理员”),而不是两次?
问题原来是两个目录的不同AuthName值。我认为它的唯一目的是为用户提供有意义的提示。再次阅读文档后,发现它还有另一个目的:浏览器将自动尝试对具有相同 AuthName 的目录使用相同的凭据。
所以在我的情况下发生的事情是,在通过/stuff/admin身份验证后,浏览器会请求/stuff/something-else,它会得到“401 Unauthorized”响应,但它甚至不会尝试相同的凭据。在我将 AuthName 更改为相同后,它会通过使用我之前验证过的“admin”用户名重试来自动响应 401,这很有效。
您是否尝试过颠倒 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
h,
亚德里克
我还没有尝试过,但是将它们都更改为需要有效用户并将 admin .htaccess 指向一个组 .htpasswd 文件,该文件是 admin 子集和基本目录 .htaccess 到一个 .htpasswd 文件更大的超集?
我相信当您在单独的行中列出内容时,会隐含“和”。尝试在同一行列出隐含“或”的用户: