我在 .htaccess 文件中使用类似这样的内容来限制对网站的访问:
AuthUserFile /some/directory/.passwd
AuthGroupFile /dev/null
AuthName EnterPassword
AuthType Basic
require valid-user
这可以正常工作,但是每次更改子域名时都会要求用户进行身份验证,例如 user1.mywebsite.com、user2.mywebsite.com 或仅仅是 mywebsite.com
有没有办法告诉 Apache2,当用户通过一个子域的身份验证时,它也应该授予他访问所有其他子域的权限?
答案1
不可能;您可以使用单个 .htaccess 文件授予使用相同凭据访问目录树中任何内容的权限,但每个唯一子域都需要身份验证。
正如 Benny 指出的那样,您需要某种形式的基于会话的身份验证才能实现这一点。
答案2
通过 http 基本身份验证规范不可能做到这一点。领域 bob.example.com 和 elisa.example.com 是两个不同的保护空间,几乎每个浏览器都会将它们视为两个独立的不同领域,应向其提供不同的身份验证凭据。
不过,有一个解决方案 - HTTP 摘要身份验证。它允许您指定保护空间内的所有 URL 域。但是,它不允许使用通配符子域,因此在处理了十几个域之后,它就变得非常麻烦。示例配置。
<Location />
AuthType Digest
AuthName "teh realm"
AuthDigestAlgorithm MD5
AuthDigestDomain / http://domain.com/ http://subdomain.domain.com/
AuthDigestQop auth
AuthDigestProvider file
AuthUserFile /etc/apache2/.htpasswd-digest
</Location>
在我看来,你唯一的选择是编写自己的 FastCGI 身份验证器,使用 cookie,允许通配符子域。如果你的域名很少,坚持使用 digest 会更容易。
答案3
所有子域名是否都由同一文档根目录的子文件夹提供服务?如果是,则将该身份验证放在主文档根目录的 .htaccess 中似乎可以减轻重复身份验证。
作为替代方案(尽管您的用户可能需要进行一些开发工作),您可以尝试基于会话的身份验证。