Php .htaccess AuthUserFile变量基于环境

Php .htaccess AuthUserFile变量基于环境,php,apache,.htaccess,mod-rewrite,acquia,Php,Apache,.htaccess,Mod Rewrite,Acquia,我正在尝试基于环境加载.htpasswd文件。如果我硬编码的网址,它的工作很好 AuthType Basic AuthName "Password Protected" AuthUserFile /var/www/html/sitename.dev/docroot/.htpasswd Require valid-user 我们的主机提供商是一个全局变量,您可以在htaccess中使用 %{ENV:AH_SITE_ENVIRONMENT}采集主机环境-可能的值为dev、test或prod 使用该

我正在尝试基于环境加载.htpasswd文件。如果我硬编码的网址,它的工作很好

AuthType Basic
AuthName "Password Protected"
AuthUserFile /var/www/html/sitename.dev/docroot/.htpasswd
Require valid-user
我们的主机提供商是一个全局变量,您可以在htaccess中使用

%{ENV:AH_SITE_ENVIRONMENT}
采集主机环境-可能的值为
dev
test
prod

使用该变量,我们可以检查当前所处的环境。如果需要,还可以使用以下规则进行检查:
setenif Host^dev\。DEV
但我想阻止这种情况

我想使用IfDefine,但IfDefine不读取全局变量。是否可以执行以下操作之一

  • 将路径设置为变量,并使用
    AH\u SITE\u环境
    变量存储路径,然后执行以下操作:
    AuthUserFile MyConfiguredPathVar
  • 在AuthUserFile中直接将一个var放入concat,如so
    AuthUserFile/var/www/html/sitename.%{ENV:AH\u SITE\u ENVIRONMENT}/docroot/.htpasswd
  • 使用ifdefine并检查
    AH\u SITE\u ENVIRONMENT=dev
  • Apache版本2.2.22

    更新1:可以使用
    RewiteCond

    # Determine whether environment is production:
    RewriteCond %{ENV:AH_SITE_ENVIRONMENT} !prod
    

    这里的问题是,由于在
    mod_ENV
    setenif_module
    模块之前加载了环境变量,因此身份验证模块无法访问这些变量。这意味着SetEnv和setenif指令在身份验证处理期间不起作用,并且尚未设置变量

    您可以通过以下方式检查加载模块的顺序:
    httpd-M

    还有这个:尽管所有这些解决方案都需要更改服务器配置。无法从.htaccess访问