我正在尝试使用 .htaccess 和 Apache 2.2 控制对测试站点/主机的访问,但不控制对生产站点的访问。我正在使用 mod_rewrite 来检测主机名并设置一些用于控制站点各个方面的环境变量,但不能利用它来控制访问。我只能用 mod_setenvif 控制访问。
我可以检测主机并设置环境变量。(简化。)
RewriteCond %{HTTP_HOST} test\..*
RewriteRule ^ - [ENV=requireAuth:1,ENV=...]
然后我稍后尝试使用它来控制访问。
AuthType Basic
AuthName "Authentication Required"
AuthUserFile /file/location/.htpasswd
Order Deny,Allow
Deny from all
Satisfy any
Require valid-user
Allow from env=!requireAuth
这不起作用。删除 not (!) 会强制每个站点都有一个不可接受的密码。
我使用 mod_setenvif 尝试了几种变体,并且只有 requireAuth2 有效。
SetEnvIf HOST "test.+" requireAuth2
SetEnvIf requireAuth ".+" requireAuth3
SetEnvIf %{ENV:requireAuth} ".+" requireAuth4
我使用 phpinfo() 转储请求,只看到 requestAuth 和 requestAuth2。
我宁愿不必重做我的主机检查逻辑,因为我有许多不同的主机名和许多不同的环境变量。我也喜欢默认访问并拥有一个 env=! 测试。授予访问权限而不是拒绝访问是错误的。
有什么建议么?
谢谢,韦斯。