在Apache配置中有条件地设置环境变量

时间:2013-12-16 17:54:15

标签: linux apache environment-variables

我正在努力为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

1 个答案:

答案 0 :(得分:2)

从源资源中搜索您的问题我找到了Turboflash完成的优秀的Env测试矩阵

以下是完整的测试矩阵帖子: 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(并且不要使用mod_rewrite更改此env值,请检查矩阵)。