4

我正在尝试使用 .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=! 测试。授予访问权限而不是拒绝访问是错误的。

有什么建议么?

谢谢,韦斯。

4

1 回答 1

2

使用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
于 2014-04-15T21:24:37.570 回答