在 apache httpd 服务器中设置 RequestHeader 不起作用

在 apache httpd 服务器中设置 RequestHeader 不起作用

我有一个要求,需要使用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

在您原始配置中,您使用.设置响应标头而不是请求标头HeaderRequestHeaderHeader

我已经通过将 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 执行的内部重定向后继续存在的情况。请记住,自定义标头可能不是立即可供评估

相关内容