我只想为特定的 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>