如果不存在,则在 apache 中设置标头

如果不存在,则在 apache 中设置标头

我有一个正在注入一些标头的代理,但我想修改它,以便它只在标头尚不存在时设置标头:

<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 setIfEmptyApache 版本 <=2.4.6(setIfEmpty不支持操作):

RequestHeader set MY_HEADER "value" "expr=-z %{req:MY_HEADER}"

相关内容