.htaccess基于环境的AuthUserFile变量

时间:2016-10-06 08:58:56

标签: php apache .htaccess mod-rewrite acquia

我正在尝试根据环境加载.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托管环境 - 可能的值为devtestprod

使用该变量,我们可以检查我们当前的环境。如果需要,还可以使用以下规则进行检查:SetEnvIf Host ^dev\. DEV但我想阻止它。

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

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

    Apache版本2.2.22

    更新1:可以使用RewiteCond

    检查环境
    # Determine whether environment is production:
    RewriteCond %{ENV:AH_SITE_ENVIRONMENT} !prod
    

1 个答案:

答案 0 :(得分:1)

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

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