根据apache env变量,有条件地要求HTTP身份验证

时间:2011-04-30 23:38:35

标签: apache .htaccess

我的托管有多个部署我的网站(开发,舞台,制作)。当且仅当他们设置的环境变量等于'dev'时,如何在我的htaccess文件中添加HTTP Auth标头? (意思是他们设置了一个名为SITE_ENVIRONMENT的变量,可以是dev,stage或prod,具体取决于您访问的站点。

PS。我很熟悉需要htaccess以vanilla方式授权,但在评估变量或根据结果编写块时我完全迷失了。

2 个答案:

答案 0 :(得分:16)

您可以使用SetEnvIf模式匹配域并确定要使用的环境。

SetEnvIfNoCase Host ^dev.domain.com$ is_on_dev_site

AuthType Basic
AuthName "Protected Login"
AuthUserFile /path/to/.htpasswd
AuthGroupFile /dev/null
Require valid-user
Deny from env=is_on_dev_site
#allow something like API usage to bypass
SetEnvIf Request_URI "(/api/.(.*))$" allow
Order deny,allow
Allow from env=allow
Satisfy any

男:http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html

答案 1 :(得分:0)

我不确定这是可能的。

理论上,您可以使用:

RewriteCond %{ENV:SITE_ENVIRONMENT} ^dev$

确定你所在的环境,但是我想不出如何编写RewriteRule以强制执行基本身份验证...除非你重定向到处理基本身份验证的另一个页面并将SITE_ENVIRONMENT变量重置为“ dev-authenticated“或某事。