如何使用 envif 为某些子域而不是其他子域设置基本身份验证

How to set up basic authentication for some subdomains but not others using envif

感谢 stack overflow 的一些很棒的人,我使用这个脚本在 dev.website.com 进行身份验证以要求输入密码:

SetEnvIfNoCase Host ^.*dev\.website\.com$ require_auth=true
AuthUserFile /var/www/vhosts/website.com/.htpasswd
AuthName "Password Protected"
AuthType Basic
Order Deny,Allow
Deny from all
Satisfy any
Require valid-user
Allow from env=!require_auth

我还希望它要求输入密码:myname.website.com mynamedev.website.com & devmyname.website.com。基本上除了 "www.website.com" 和 "website.com".

最简单的方法是什么?

我原以为您可以执行以下操作

SetEnv require_auth=true
SetEnvIfNoCase Host ^www\.website\.com$ require_auth=false
SetEnvIfNoCase Host ^website\.com$ require_auth=false
AuthUserFile /var/www/vhosts/website.com/.htpasswd
AuthName "Password Protected"
AuthType Basic
Order Deny,Allow
Deny from all
Satisfy any
Require valid-user
Allow from env=!require_auth

第一行将默认情况设置为需要身份验证,后两行是不需要身份验证的特定情况。

尝试:

#set env "auth" only for subdomains
SetEnvIfNoCase host ^((?!www\.).+)\.website\.com$ auth=1
 #auth 
 AuthUserFile /var/www/vhosts/website.com/.htpasswd
 AuthName "Password Protected"
AuthType Basic   

 #Here is where we allow/deny
Order Deny,Allow
Satisfy any
Deny from all
Require user valid-user
Allow from env=!auth