使用环境变量构建 if 条件块的一种方法是使用mod_macro模块。我之前在这里做了一个例子。
在这种特殊情况下,您将在 VirtualHost 文件之上(在 VirtualHost 定义之前):
<Macro ConditionalBlockMacroSecurity_production>
AuthName "Restricted Area"
AuthType Basic
AuthUserFile /path/to/file/.htpasswd
AuthGroupFile /dev/null
require valid-user
</Macro>
<Macro ConditionalBlockMacroSecurity_development >
<IfModule mod_headers.c>
Header set MyHeader "Hello this is DEVELOPMENT envirronment. It took %D microseconds for Apache to serve this request."
</IfModule>
</Macro>
在虚拟主机内部:
Use ConditionalBlockMacroSecurity_${APP_ENV}
其中 htpassword 文件的路径也可以设置为宏的参数。
此解决方案的缺点是您需要在生产服务器上安装 mod_macro,它不是一个常用的模块,您需要对生产环境进行一些控制才能做到这一点。另一方面,一个简单的解决方案是根据环境拥有多个版本的虚拟主机,并在 Auth 部分添加一些注释。但是,如果您正在寻找一个通用的解决方案,那肯定意味着这是一个经常出现的问题,并且您希望避免手动编辑文件,在这种情况下,mod_macro 可以成为一种非常专业的方式来利用您的 apache 体验,直到您的 apache 配置变成单个宏带参数,调用很多其他的宏。