我正在努力为Apache使用的Single Sign On模块做一个回退。通常,当启用此模块时,一旦模块将HTTP_LOGIN
设置为用户名,则在登录后。但我想以这样的方式配置我的网络服务器,以便我有一个后备选项。我的想法是在Apache配置中设置一个环境变量,指示哪个SSO解决方案当前处于活动状态。我检查了这个,它按预期工作。 Web应用程序会看到新的环境变量。
但我也想强制HTTP_LOGIN
达到预定值(“只读”)。如果无条件设置HTTP_LOGIN
,则按预期方式工作,但只要HTTP_LOGIN
设置为SSO_SOLUTION
,我就会有条件地设置none
。
SetEnv SSO_SOLUTION none
SetEnvIf SSO_SOLUTION ^none$ HTTP_LOGIN=readonly
这似乎不起作用,但我从Apache documents了解到应该这样做。我是否误解了文档和/或我在这里错误配置了什么?
mod_setenvif
在配置中配置(但是我可以从正在运行的网络服务器查询,只是为了仔细检查?)。日志中没有意外错误。
平台:RHEL 6.4
答案 0 :(得分:2)
从源资源中搜索您的问题我找到了Turboflash完成的优秀的Env测试矩阵。
对你来说真正有趣的事情是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(并且不要使用mod_rewrite更改此env值,请检查矩阵)。