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

2024-03-11

我试图使用 .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=! 的想法测试。授予访问权限时会出现错误,而不是拒绝访问时会出现错误。

有什么建议么?

谢谢,韦斯。


Use 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

允许来自 env 的 mod_rewrite 而不是 .htaccess 中的 mod_setenvif 的相关文章

随机推荐