我在一个域下有2个虚拟主机:a.mydomain.com,b.mydomain.com。在apache的全局配置中,我有以下内容:
<Directory />
Options FollowSymLinks
AllowOverride None
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider file
AuthUserFile /etc/httpd/password_http_auth
Require user mydomain_user
</Directory>
这适用于所有具有基本身份验证保护的虚拟主机。但是,在我去mydomain.com并在那里进行身份验证后,我需要输入a.mydomain.com和b.mydomain的用户名和密码。
所以我的问题是:有没有办法只在mydomain.com上进行身份验证,而且该用户不需要再为该域下的所有虚拟主机输入用户名和密码?
谢谢你。
在httpd.conf或apache2.conf中完成的任何配置都是全局配置,将适用于您配置的所有站点。
仅适用于其中一个网站。将身份验证配置移动到特定的虚拟主机配置文件
<Directory />
# keep these
Options FollowSymLinks
AllowOverride None
# move these to the vhost configuration you want to protect
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider file
AuthUserFile /etc/httpd/password_http_auth
Require user mydomain_user
</Directory>
这可能对某些人有用:
我有一个包含许多别名的虚拟主机。它是一个多站点设置,具有多个网站的单一源代码。我需要对某些主机进行基本身份验证,但对于其他主机则不需要,而虚拟主机对所有主机/域都是通用的。
我是这样做的,它工作正常(Apache 2.4 / Ubuntu 18 LTS):
SetEnvIf Host "secure\.host\.com" SECURED
SetEnvIfNoCase Request_URI "^/secure-dir/" SECURED
AuthType Basic
AuthName "Basic Auth Message"
AuthUserFile /var/www/public-html/.htpasswd
Require valid-user
Satisfy any
Order allow,deny
Allow from all
Deny from env=SECURED
在上面的示例中,我还有一个安全目录(第2行),它使用正则表达式,因此它将与该目录中的任何文件匹配。
第1行是安全主机名。请注意每个点字符前面的反斜杠!
根据需要为主机或目录添加任意数量的行。