我试图使用 .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(使用前将#替换为@)