php - .htaccess AuthUserFile 基于环境的变量

标签 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} The Acquia hosting environment — possible values are dev, test, or prod

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

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

  1. 将路径设为变量,并使用 AH_SITE_ENVIRONMENT 变量存储路径,然后执行如下操作:AuthUserFile MyConfiguredPathVar
  2. 将 var 直接放入 AuthUserFile 中以进行连接,如下 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

关于php - .htaccess AuthUserFile 基于环境的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891783/

相关文章:

.htaccess - 301重定向与mod_rewrite

Apache .htaccess 将 index.html 重定向到 root,为什么是 FollowSymlinks 和 RewriteBase?

regex - Apache 重定向正则表达式 : match something that is not following something

apache - 错误 :insecure response with apache

linux - Web服务器攻击解决方案?

php - 使用 get 参数在 apache 中自定义 URL

php - 我的用户声称我的应用程序突然假设了另一个用户

php - 如何使用codeigniter将已删除的记录存储在mysql数据库中

javascript - 是否可以在 div 中打开包含外部 javascript 和 css 的页面?

php - 网站在本地主机上和上传到服务器时显示不同