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

3
我正在尝试为Apache使用的单点登录模块创建一个后备选项。通常情况下,启用此模块后,登陆一次后该模块将HTTP_LOGIN设置为用户名。但我希望以这样的方式配置我的Web服务器,即具有后备选项。我的想法是在Apache配置中设置一个环境变量,指示当前活动的SSO解决方案。我检查了这个设置,并且它按预期工作。Web应用程序看到了新的环境变量。
但我还想强制将HTTP_LOGIN设置为预定值(“readonly”)。当无条件设置HTTP_LOGIN时,这样做可以正常工作,但我想当SSO_SOLUTION设置为none时有条件地设置HTTP_LOGIN
SetEnv SSO_SOLUTION none
SetEnvIf SSO_SOLUTION ^none$ HTTP_LOGIN=readonly

这似乎不起作用,但我从Apache文档中理解到应该有效。我是否误解了文档和/或配置不正确? mod_setenvif 在配置中进行配置(但我可以从正在运行的Web服务器中查询它,只是为了确保?)。日志中没有意外错误。
平台:RHEL 6.4
1个回答

2

在查找与您的问题相关的资源时,我发现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(不要用mod_rewrite更改此环境值,请检查矩阵)。


这就是诀窍,没错。不过我使用了SERVER_SOFTWARE,因为我不确定REMOTE_ADDR是否在主Apache配置中设置(虽然我也没有测试REMOTE_ADDR)。 - jippie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接