允许来自env的mod_rewrite而不是.htaccess中的mod_setenvif

时间:2014-04-15 14:41:51

标签: apache .htaccess authentication mod-rewrite setenv

我正在尝试使用.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。

1 个答案:

答案 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