2017-10-05 111 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

相關問題