我正在尝试根据环境加载.htpasswd文件。如果我对URL进行硬编码,则可以正常工作。
AuthType Basic
AuthName "Password Protected"
AuthUserFile /var/www/html/sitename.dev/docroot/.htpasswd
Require valid-user
我们的托管服务提供商providing是您可以在htaccess中使用的全局变量。
%{ENV:AH_SITE_ENVIRONMENT}
Acquia托管环境 - 可能的值为dev
,test
或prod
使用该变量,我们可以检查我们当前的环境。如果需要,还可以使用以下规则进行检查:SetEnvIf Host ^dev\. DEV
但我想阻止它。
我想使用IfDefine,但ifdefine不会读取全局变量。是否可以执行以下操作之一?
AH_SITE_ENVIRONMENT
变量存储路径,然后执行以下操作:AuthUserFile MyConfiguredPathVar
AuthUserFile /var/www/html/sitename.%{ENV:AH_SITE_ENVIRONMENT}/docroot/.htpasswd
AH_SITE_ENVIRONMENT = dev
Apache版本2.2.22
更新1:可以使用RewiteCond
# Determine whether environment is production:
RewriteCond %{ENV:AH_SITE_ENVIRONMENT} !prod
答案 0 :(得分:1)
这里的问题是auth模块无法访问ENV变量,因为它们是在mod_env
和setenvif_module
模块之前加载的。这意味着SetEnv和SetEnvIf指令在身份验证处理期间不起作用,并且尚未设置变量。
您可以通过以下方式检查已加载模块的顺序
httpd -M