我正在尝试使用.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 =的想法!测试。授予访问权限而不是拒绝访问权限。
有什么建议吗?
谢谢,Wes。
答案 0 :(得分:1)
使用mod_setenv
:
SetEnvIfNoCase Host ^test\. requireAuth
AuthType Basic
AuthName "Authentication Required"
AuthUserFile /file/location/.htpasswd
Order Deny,Allow
Deny from all
Satisfy any
Require valid-user
Allow from env=!requireAuth