Apache .htaccess 技巧是否仅对所有子域进行一次验证?

Apache .htaccess 技巧是否仅对所有子域进行一次验证?

我在 .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 中似乎可以减轻重复身份验证。

作为替代方案(尽管您的用户可能需要进行一些开发工作),您可以尝试基于会话的身份验证。

http://httpd.apache.org/docs/2.3/mod/mod_session.html

相关内容