使用Apache在Heroku上进行ENV变量访问

时间:2014-07-09 19:29:29

标签: php apache .htaccess heroku

我有一个部署到Heroku的PHP / Apache应用程序。我想在Heroku上运行时启用基本身份验证。这很有效......

AuthUserFile /app/prototypes/.htpasswd
AuthType Basic
AuthName "Restricted Access"
Require valid-user

但是,如果设置了PASSWORD_PROTECTED,我只想启用它。我像这样设置了一个heroku config var:

heroku config:set PASSWORD_PROTECTED=true

然后更新.htaccess看起来像:

<IfDefine %{ENV:PASSWORD_PROTECTED}>
    AuthUserFile /app/prototypes/.htpasswd
    AuthType Basic
    AuthName "Restricted Access"
    Require valid-user
</IfDefine>

但是要求有效用户永远不会被运行,所以我似乎无法从Heroku中的.htacess访问ENV vars,或者我做错了。关于如何正确地做到这一点的任何想法?

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上,但你的语法有点偏差。

而不是<IfDefine>,而不是lets you test for variables set with Define or via the -D parameter on startup,您应该使用the <If> directive。这是Apache 2.4中的新功能,所以示例在实际上有点薄,但我们可以使用这些示例和this rather technical expression reference来提出这个:

<If "-T reqenv('PASSWORD_PROTECTED')">
    AuthUserFile /app/prototypes/.htpasswd
    AuthType Basic
    AuthName "Restricted Access"
    Require valid-user
</If>

reqenv是一个查找环境变量的函数; -T是一个返回true的运算符,除非它的参数为空,0,“false”,“off”或“no”。