2013-12-16 105 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