带有 OS 环境变量的 Apache 配置 If 语句

Apache config If statement with OS environment variable

如何根据 OS 级环境变量(printenv 将包含 ENV=qa、ENV=prod 等)有条件地设置代理?像这样:

<If "${ENV} == 'qa'">
  ProxyPass "/" "www.google-qa.com"
</If>
<If "${ENV} == 'prod'">
  ProxyPass "/" "www.google-production.com"
</If>

像上面这样的东西我得到:Cannot parse condition clause: Parse error near '$'

有两种替代语法可以代替:

<If "'${ENV}' == 'qa'">

<If "reqenv('ENV') == 'qa'">

但是 ProxyPass 不能封装在 <If> 中,主要是因为这是一个针对每个请求的检查,并且发生在稍后的处理过程中,然后当 ProxyPass 必须执行时。

通过 mod_rewrite 进行代理并在 RewriteCond

中检查 %{ENV:ENV} 可能更直接
RewriteEngine on
RewriteCond %{ENV:ENV} =qa
RewriteRule ^/(.*) http://www.google-qa.com/ [P]
RewriteCond %{ENV:ENV} =prod
RewriteRule ^/(.*) http://www.google-production.com/ [P]