mod_rewrite:环境变量未在 RewriteConds 中扩展

mod_rewrite:环境变量未在 RewriteConds 中扩展

我有一个RewriteCond类似于.htaccess

RewriteCond "%{ENV:FOO}" =bar

${ENV:FOO}正在扩展为 的值FOO,它始终是空白的。

例如,如果我SetEnv FOO "bar"就在 之前RewriteCond,然后启动RewriteLogLevel,我会在重写日志中得到以下内容:

RewriteCond: input='' pattern='=bar' => not-matched

我在这里做错了什么?如何使环境变量在RewriteConds 内部扩展?

另外,如果我添加一个愚蠢的RewriteRule喜欢RewriteRule .* %{ENV:FOO},我可以在重写日志中看到变量在那里被正确扩展。

我的Apache版本是2.2.17。

编辑:我发现另一个参考这个问题。似乎一个“解决方案”是使用SetEnvIf而不是SetEnv... =\

此外, 的位置似乎没有SetEnv任何影响。我已将其放在 httpd.conf 和 中,.htaccess但均不起作用。

答案1

啊,我们开始吧。从SetEnv 文档(在“警告”下):

SetEnv 指令在请求处理期间运行较晚,这意味着 SetEnvIf 和 RewriteCond 等指令将看不到用它设置的变量。

因此,就目前而言,我想我正在使用:

SetEnvIf _ .* FOO=bar

相关内容