我有一个要求,需要使用RequestHeader
从 URI 的查询字符串中检索到的值进行设置。
采用的方法是写入RewriteCond
和,ReWriteRule
其中条件是从%{QUERYSTRING}
变量中提取值并将其设置到另一个环境变量中,然后引用它并将其添加到请求标头。
但这似乎对我不起作用。我在 RHEL 上使用 Apache 2.2。
我的 httpd 配置放在其中一个 .conf 文件中,如下所示。
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule . - [E=RU:%1]
Header set "X-Header" "%{RU}e" env=RU
笔记:我还尝试通过硬编码值来设置请求标头,并且还启用了代理模块。
RequestHeader set X-User-ID "test"
Header append X-test %{RU}e
RequestHeader set X-UserID %{RU}e early
使用“早期”选项也无济于事。
答案1
在您原始配置中,您使用.设置响应标头而不是请求标头Header
。RequestHeader
Header
我已经通过将 X-header HTTP 标头的日志记录添加到访问日志格式来测试它,并且它工作正常。我唯一更改的是将 . 更改为 ^RewriteRule
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^ - [E=RU:%1]
RequestHeader set "X-Header" "%{RU}e" env=RU
您如何测试标题是否已设置?
答案2
从您最后一条评论来看,您似乎正在尝试设置一个在外部重定向后仍然存在的环境变量。这无法通过环境变量或请求标头来完成,因为它们的作用域是每个请求。但是,您可以通过使用 CO 标志在 RewriteRules 中设置 cookie 来实现。
@Unbeliever 建议的解决方案最适合于您希望环境变量在 Apache mod_rewrite 执行的内部重定向后继续存在的情况。请记住,自定义标头可能不是立即可供评估。