如何在 Apache 中仅为特定 IP 设置 Env?

如何在 Apache 中仅为特定 IP 设置 Env?

我只想为特定的 IP 设置一些环境,如何在 Apache 中做到这一点?

答案1

查看SetEnvIf指令,它根据请求的属性定义环境变量,例如Remote_Addr(发出请求的客户端的 IP 地址)...

SetEnvIf Remote_Addr ^192\.168\.0\. LOCAL_LAN=1

...或Server_Addr(接收请求的服务器的 IP 地址)...

SetEnvIf Server_Addr ^192\.168\.0\.1$ SITE_PROFILE=PRODUCTION
SetEnvIf Server_Addr ^192\.168\.0\.2$ SITE_PROFILE=DEVELOPMENT

请注意,第二个参数SetEnvIf是一个正则表达式,所以如果您想使用裸 IP,请格外注意,因为像 192.168.1.1 这样的模式(虽然看起来比我上面转义的点干净得多)最终也会匹配 192.168.101.10。

更新:

SetEnvIf无法访问 QUERY_STRING,但是根据文档:-

查看重写条件指令mod_rewrite有关如何匹配查询字符串的更多信息。

所以就像...

RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.
RewriteCond %{QUERY_STRING} (^|&)debug=
RewriteRule . - [E=LOCAL_LAN_AND_DEBUG:1]

答案2

Apache 2.4您可以使用 CIDR 表示法为单个 IP 地址或整个子网设置环境变量。例如:

<If "-R '93.184.216.34'">
  SetEnv myvar1=example
</If>

<If "-R '93.184.216.0/24'">
  SetEnv myvar2=subnet
</If>

这些也可以与表达式中的逻辑运算符结合使用:

<If "-R '93.184.216.34' || 
     -R '192.0.32.0/24'">
  SetEnv myvar3=both
</If>

相关内容