在bash中设置环境变量的值:
# export PRODUCTION=true
# echo $PRODUCTION
# true
以下是我的虚拟主机文件的相关摘录:
<If "-T osenv('PRODUCTION')">
Define dogs dogs
</If>
<Else>
Define cats cats
</Else>
apache2ctl -S
生成:
Define: dogs=dogs
Define: cats=cats
因此,我们有一个量子条件真与假。这里发生了什么事?我怎样才能让它正常运行?
我在这些参考资料中找不到任何表明我做错的事情的东西。
答案1
运行时,apachectl -S
它只是解析代码以确保其语法正确,而不是实际执行代码。输出只是告诉您可能发生的事情,而不是评估 if/else 块的结果。
您可以通过在 if 和 else 块中实际使用有效的 Apache 指令来验证这一点。例如:
<If "-T osenv('PRODUCTION')">
Define dogs dogs
Header set MyHeader1 "PRODUCTION defined %D %t"
</If>
<Else>
Define cats cats
Header set MyHeader2 "PRODUCTION undefined %D %t"
</Else>
无论是否定义了 PRODCUTION,只要您启动 Apache,您都会在服务器的响应中看到不同的标头。 和%D
会%t
添加随每个请求而变化的内容,这样您就不会认为自己以某种方式获得了缓存的内容。
请注意,要使此功能有效,您必须在设置/取消设置 PRODUCTION 环境变量之间完全停止并启动,重新启动将不起作用。