我有一个部署到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,或者我做错了。关于如何正确地做到这一点的任何想法?
答案 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”。