2013-12-16 106 views
2

有條件地設置環境變量我試圖做一個回落的單點登錄模塊被Apache使用。通常,當啓用此模塊時,一旦模塊將HTTP_LOGIN設置爲用戶名,則登錄後。但我想配置我的網絡服務器,使我有一個回退選項。我的想法是在Apache配置中設置一個環境變量,指出哪個SSO解決方案當前處於活動狀態。我檢查了這一點,它按預期工作。 Web應用程序會看到新的環境變量。在Apache配置

但我也想迫使HTTP_LOGIN到預定值(「只讀」)。當設置HTTP_LOGIN無條件,這正常工作,但我想只要HTTP_LOGINSSO_SOLUTION設置爲none有條件地設置。

SetEnv SSO_SOLUTION none 
SetEnvIf SSO_SOLUTION ^none$ HTTP_LOGIN=readonly 

這似乎不起作用,但我從Apache documents瞭解它應該。我是否誤解了文檔和/或在這裏錯誤配置了什麼?

mod_setenvif在配置中配置的(但我可以查詢從運行Web服務器也一樣,只是仔細檢查?)。日誌中沒有意外的錯誤。

平臺:RHEL 6.4

回答

1

從源頭上的資源你的問題我搜索發現Turboflash做了優秀的信封測試矩陣

以下是完整的測試矩陣後: http://turboflash.wordpress.com/2010/05/27/apache-environment-variables-visibility-with-setenv-setenvif-and-rewriterule-directives/

而且非常有趣的事情的事情你是A_2環境變量的結果裏面是空的。

在最後的矩陣他說環境變量Setenv設置不可從SetenvIf。但是,通過SetenvIf(B_2)設置的環境變量並非如此。

所以,你應該儘量使用SetenvIf代替Setenv與像Remote_Addr "^"始終匹配規則是這樣的:

SetEnvIf Remote_Addr "^" SSO_SOLUTION=none 
SetEnvIf SSO_SOLUTION ^none$ HTTP_LOGIN=readonly 

而且還上設置SSO_SOLUTION使用的其他部分使用SetEnvIf之後(不改變這個ENV值與mod_rewrite,檢查矩陣)。

+0

這是卓有成效的,是的。然而,我卻用SERVER_SOFTWARE,因爲我不知道,如果REMOTE_ADDR將在主要的Apache配置中設置(我沒有測試REMOTE_ADDR要麼雖然)。 – jippie