.htaccess AuthUserFile变量基于环境


.htaccess AuthUserFile variable based on environment

我正在尝试基于环境加载.htpasswd文件。如果我对URL进行硬编码,它可以正常工作。

AuthType Basic
AuthName "Password Protected"
AuthUserFile /var/www/html/sitename.dev/docroot/.htpasswd
Require valid-user

我们的托管提供商正在提供一个全局变量,您可以在htaccess中使用。

%{ENV:AH_SITE_ENVIRONMENT} Acquia托管环境——可能的值为devtestprod

使用该变量,我们可以检查当前的环境。如果需要,也可以使用以下规则进行检查:SetEnvIf Host ^dev'. DEV,但我希望防止这种情况发生。

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

  1. 将路径设为变量,并将路径与AH_SITE_ENVIRONMENT变量一起存储,然后执行以下操作:AuthUserFile MyConfiguredPathVar
  2. 在AuthUserFile中直接放入一个var以进行连接,如AuthUserFile /var/www/html/sitename.%{ENV:AH_SITE_ENVIRONMENT}/docroot/.htpasswd所示
  3. 使用ifdefine并检查是否为AH_SITE_ENVIRONMENT = dev的任何其他方法

Apache版本2.2.22

更新1:可以使用RewiteCond 检查环境

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

这里的问题是auth模块无法访问ENV变量,因为它们是在mod_envsetenvif_module模块之前加载的。这意味着SetEnv和SetEnvIf指令在身份验证处理过程中不起作用,并且变量尚未设置。

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