我想知道是否可以根据 .htaccess 文件中的虚拟主机 URL 设置有条件的 http 基本身份验证要求。
例如,我想做的是让 mysite.com 和 test.mysite.com 在同一目录中运行相同的代码库,但密码保护 test.mysite.com。它将以这种方式设置,这样我就不需要分支我的代码,因为我的应用程序代码可以看到它从哪个 vhost/url 提供服务并选择数据库来提供内容。
最佳答案
你可以通过使用 mod_setenvif
来解决这个问题。连同 mod_auth
模块。使用 SetEnvIfNoCase
指令设置哪个主机受密码保护。您需要一些额外的指令来满足访问权限:
# Check for the hostname here
SetEnvIfNoCase HOST ^test\.mysite\.com\.?(:80)?$ PROTECTED_HOST
然后在
Directory
里面阻止(或只是公开)您已经设置了身份验证内容,如下所示:AuthUserFile /var/www/test.mysite.com/htpasswd
AuthType Basic
AuthName "Password Protected"
现在需要/满足的东西:
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=!PROTECTED_HOST
这将使任何不匹配的主机
^test\.mysite\.com\.?(:80)?$
无需身份验证( Allow from env=!PROTECTED_HOST
)即可访问,否则,我们需要有效用户( Require valid-user
)。 Satisfy any
确保我们只需要 2 个中的一个,即 Allow 或 Require。
关于apache - .htaccess 虚拟主机的基本身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7334307/