我有一台 Apache 服务器,其 Web 目录受密码保护。该目录有一个子目录,需要另一个密码,但任何可以访问子目录的人也应该可以访问父目录。即:
- /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 的用户只登录一次(以“管理员”身份),而不是两次?
答案1
问题在于不同的授权名称这两个目录的值。我认为它的唯一目的是为用户提供有意义的提示。读过文档再次,事实证明它有另一个目的:浏览器将自动对具有相同 AuthName 的目录尝试相同的凭据。
所以我的情况是,在验证身份后/东西/管理员浏览器会请求/东西/其他东西,它会收到“401 Unauthorized”响应,但它甚至不会尝试相同的凭据。在我将 AuthName 更改为相同后,它会自动响应 401,并使用我之前用于身份验证的“admin”用户名重试,这很有效。
答案2
您是否尝试过反转 htaccess 中节的顺序,以便更具体的情况排在第一位?这可能会影响匹配并解决您的双重提示问题。
另一件需要检查的事情是您是否可以使用 Realms 或 Groups 来简化,也许指定多个容器使用相同的身份验证后端。
Apache 和 Apache2 之间的 (AAA) 有所不同,因此请检查您所拥有的内容。以下是两套文档:
http://httpd.apache.org/docs/1.3/howto/auth.html http://httpd.apache.org/docs/2.2/howto/auth.html
嗯,
阿德里克
答案3
我还没有尝试过,但是将它们都改为需要有效用户,并将管理员 .htaccess 指向组 .htpasswd 文件(它是管理员子集),将基目录 .htaccess 指向具有更大超集的 .htpasswd 文件,这样可行吗?
答案4
我相信,当你在不同的行上列出事物时,会有一个隐含的“和”。尝试在同一行上列出用户,以获得隐含的“或”:
<Directory "/stuff">
[AuthType Basic, AuthName, etc.]
Require user stuff admin
</Directory>