我正在尝试回退到 Apache 使用的单点登录模块。通常当启用此模块时,一旦登录后,模块会将 HTTP_LOGIN
设置为用户名。但是我想以一种有后备选项的方式配置我的网络服务器。我的想法是在 Apache 配置中设置一个环境变量,指示哪个 SSO 解决方案当前处于事件状态。我检查了这个并且它按预期工作。 Web 应用程序看到新的环境变量。
但我还想将 HTTP_LOGIN
强制设置为预定值(“只读”)。当无条件设置 HTTP_LOGIN
时,这会按预期工作,但我希望在 SSO_SOLUTION
设置为 none
时有条件地设置 HTTP_LOGIN
.
SetEnv SSO_SOLUTION none
SetEnvIf SSO_SOLUTION ^none$ HTTP_LOGIN=readonly
这似乎行不通,但我从 Apache documents 了解到它应该。我是否误解了文档和/或我是否在此处配置错误?
mod_setenvif
在配置中配置(但我也可以从正在运行的网络服务器查询它,只是为了仔细检查吗?)。日志中没有意外错误。
平台:RHEL 6.4
最佳答案
从有关您问题的源资源中搜索,我发现了一个出色的环境测试矩阵,由Turboflash 完成.
对您来说真正有趣的是 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 值,检查矩阵)。
关于linux - 在 Apache 配置中有条件地设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617490/