2017-10-05 59 views
1

我有一个系统环境变量,我想在mod_rewrite中使用。在我的情况下,LOC设置为0如何使用基于系统环境变量的RewriteCond?

我想请求路由到端口8080如果LOC0,别的端口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,条件是永远不会匹配。

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

+0

能给我们你的/ etc/apache2的/ envvars中文件中的内容?你是如何加载/加载它的? – Webdesigner

+0

我解决了您在回答评论中提到的问题。我只是将env var导出到/ etc/apache2/envvars中。工程 – Raf

+0

所以基本上我的答案,该变量未加载是正确的? – Webdesigner

回答

0

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

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

我假设LOC是OS的环境变量。如果你设置了这个,在web服务器启动后apache并不知道它。

这解释了为什么条件从未匹配。

+0

它设置在 – Raf

+0

之前你有什么操作系统? 如果你打开重写日志文件,他们告诉你什么? Wenn/env变量集在哪里? – Webdesigner

+0

这是一个Debian Docker容器。我所做的是创建一个/ etc/apache2/envvars文件以满足我的需要,将该文件挂载到docker中。除了它的丑陋,它的作品。 AFAIK没有办法在apache conf文件中获得常规操作系统env vars ... – Raf

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] 
+1

“如果LOC为0,否则为端口9001” - “其他”不一定表示为1。 – MrWhite

+0

@MWWhite编辑了答案。 – olegsv

相关问题