如何使用RewriteCond基于系统环境变量?

时间:2017-10-05 13:12:01

标签: apache mod-rewrite apache2.4

我有一个系统环境变量,我想在mod_rewrite中使用它。在我的情况下,LOC设置为0

如果8080LOC,我想将请求路由到端口0,否则路由到9001。以下重写条件不起作用:

RewriteCond %{ENV:LOC} ^0
RewriteRule ^/app/ui(.*) http://app:8080/ui$1 [QSA,P,L]
RewriteRule ^/app/ui(.*) http://app:9001/ui$1 [QSA,P,L]

但是,由于每个请求都路由到端口9001,因此该条件永远不会匹配。

实现这一目标的更好方法是什么?

2 个答案:

答案 0 :(得分:0)

  

有两种影响Apache的环境变量   HTTP服务器。

     

首先,有一些环境变量由   底层操作系统。这些是在服务器启动之前设置的。

我假设LOC是OS的环境变量。如果你设置了这个,在启动web服务器之后,apache对它一无所知。

这解释了为什么条件永远不匹配。

答案 1 :(得分:0)

RewriteCond "%{ENV:LOC}" "=0"
RewriteRule ^/app/ui(.*) http://app:8080/ui$1 [QSA,P,L]

RewriteCond "%{ENV:LOC}" "!=0"
RewriteRule ^/app/ui(.*) http://app:9001/ui$1 [QSA,P,L]

RewriteCond "%{ENV:LOC}" "=0"
RewriteRule ^/app/ui(.*) http://app:8080/ui$1 [QSA,P,L]

RewriteCond "%{ENV:LOC}" "=1"
RewriteRule ^/app/ui(.*) http://app:9001/ui$1 [QSA,P,L]