如果针对 HTTP 标头进行检查,apache setenvif 不会设置环境变量

Don*_* Ch 5 apache2 environment-variables

来自http://httpd.apache.org/docs/current/mod/mod_headers.html

“当且仅当请求中存在标头 MyRequestHeader 时,才在响应上有条件地发送 MyHeader。这对于构造标头以响应某些客户端刺激非常有用。请注意,此示例需要 mod_setenvif 模块的服务。”

 SetEnvIf MyRequestHeader myvalue ENV_SET
 Header set MyHeader "%D %t mytext" env=ENV_SET 
Run Code Online (Sandbox Code Playgroud)

但后来由于Apache SetEnvIf 麻烦以及我尝试通过检查授权标头来设置环境变量的测试,ENV_SET 根本不会被设置

SetEnvIf 仅为以下设置环境变量 ENV_SET * Remote_Host * Remote_Addr * Server_Addr * Request_Method * Request_Protocol * Request_URI

文档是错误的还是我误解了什么?

使用:Apache/2.2.15 (Win32) mod_fastcgi/2.4.6 mod_jk/1.2.30

小智 4

格式为:

SetEnvIf <headername> <regex> <environment variable name and optionally a value>
Run Code Online (Sandbox Code Playgroud)

这对我有用:

SetEnvIf ACTUAL_CLIENT_IP "^172\.111\.0\.27" dontlog
Run Code Online (Sandbox Code Playgroud)

其中ACTUAL_CLIENT_IP是存储实际客户端 IP 的 HTTP 标头的名称(而不是被我们的代理服务器的 IP 覆盖的 Remote_Addr 字段)。