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

标签 linux apache environment-variables

我正在尝试回退到 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 完成.

这是完整的测试矩阵帖子: 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 值,检查矩阵)。

关于linux - 在 Apache 配置中有条件地设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617490/

相关文章:

python - 带有 env var 前缀的 Docker 命令(本地 env var)

docker - 我们可以在通过 dockerfile 构建 docker 镜像的同时通过 cmd 行传递 ENV 变量吗?

linux - 使用shell脚本修改/etc/hosts文件

svn/Apache用户访问 "500 Internal Error" "Need AuthName"问题

apache - 在 Windows 上安装和配置 Apache 2.4

node.js - create-react-app 本地和开发环境变量

mysql - OpenSuse - 在 mysql 上设置时区

linux - 调用变量运行脚本

windows - Linux 相当于 DOS "start"命令?

apache - 在 Symfony2 的配置中动态设置 BaseUrl