我有一个RewriteCond
类似于.htaccess
:
RewriteCond "%{ENV:FOO}" =bar
但${ENV:FOO}
正在扩展为 的值FOO
,它始终是空白的。
例如,如果我SetEnv FOO "bar"
就在 之前RewriteCond
,然后启动RewriteLogLevel
,我会在重写日志中得到以下内容:
RewriteCond: input='' pattern='=bar' => not-matched
我在这里做错了什么?如何使环境变量在RewriteCond
s 内部扩展?
另外,如果我添加一个愚蠢的RewriteRule
喜欢RewriteRule .* %{ENV:FOO}
,我可以在重写日志中看到变量在那里被正确扩展。
我的Apache版本是2.2.17。
编辑:我发现另一个参考这个问题。似乎一个“解决方案”是使用SetEnvIf
而不是SetEnv
... =\
此外, 的位置似乎没有SetEnv
任何影响。我已将其放在 httpd.conf 和 中,.htaccess
但均不起作用。
答案1
啊,我们开始吧。从SetEnv 文档(在“警告”下):
SetEnv 指令在请求处理期间运行较晚,这意味着 SetEnvIf 和 RewriteCond 等指令将看不到用它设置的变量。
因此,就目前而言,我想我正在使用:
SetEnvIf _ .* FOO=bar