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

Hob*_*lla 16 reverse-proxy http-headers apache-2.2

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

<Location /api>    
    RequestHeader set MY_HEADER "value"

    ProxyPass http://127.0.0.1:8000/api
    ProxypassReverse http://127.0.0.1:8000/api
</Location>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

小智 9

在 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"

我知道这很愚蠢,但它有效。


MLu*_*MLu 8

怎么样:

RequestHeader set X-My-Header "value" expr="req('X-My-Header')==''"
Run Code Online (Sandbox Code Playgroud)

有关expr= 语法的更多信息,请参阅http://httpd.apache.org/docs/current/expr.html

编辑:在 Apache 2.2 中你应该能够做到这一点:

SetEnvIf X-My-Header "" no_my_header
RequestHeader set X-My-Header "value" env=no_my_header
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,它不喜欢 "" 作为正则表达式,但 ^$ 似乎可以解决问题。 (2认同)

小智 5

阿帕奇 2.4.7

Header setifempty Access-Control-Allow-Origin "*"
Run Code Online (Sandbox Code Playgroud)

Apache 2.2.4 以下

Header append Access-Control-Allow-Origin ""
Header edit Access-Control-Allow-Origin "^$" "*"
Run Code Online (Sandbox Code Playgroud)