我有一个正在注入一些标头的代理,但我想修改它,以便它只在标头尚不存在时设置标头:
<Location /api>
RequestHeader set MY_HEADER "value"
ProxyPass http://127.0.0.1:8000/api
ProxypassReverse http://127.0.0.1:8000/api
</Location>
这可能吗?
答案1
在 Apache 2.4.7、x86_64、Ubuntu 14.04 LTS 中
我发现这是可行的
RequestHeader setIfEmpty X-Forwarded-For "127.0.0.1"
整天都在工作。但是,如果尝试使用动态值,
RequestHeader setIfEmpty X-Forwarded-For "%{REMOTE_ADDR}e"
不起作用。我发现您需要 mod_rewrite 的帮助才能获取该值。我的配置现在看起来像这样,而且它可以工作。
RewriteRule . - [E=noxff:%{REMOTE_ADDR}] RequestHeader setIfEmpty X-Forwarded-For "%{noxff}e"
我知道这很愚蠢,但它确实有效。
答案2
那么类似这样的情况怎么样:
RequestHeader set X-My-Header "value" expr="req('X-My-Header')==''"
咨询http://httpd.apache.org/docs/current/expr.html有关 expr= 语法的更多信息。
编辑:在 Apache 2.2 中您应该能够执行以下操作:
SetEnvIf X-My-Header "" no_my_header
RequestHeader set X-My-Header "value" env=no_my_header
答案3
Apache 2.4.7
Header setifempty Access-Control-Allow-Origin "*"
Apache 2.2.4 以下
Header append Access-Control-Allow-Origin ""
Header edit Access-Control-Allow-Origin "^$" "*"
答案4
以下内容应相当于RequestHeader setIfEmpty
Apache 版本 <=2.4.6(setIfEmpty
不支持操作):
RequestHeader set MY_HEADER "value" "expr=-z %{req:MY_HEADER}"