我想为特定的IP设置一些环境,如何在Apache中做到这一点?
请参阅SetEnvIf指令,该指令根据请求的属性(如Remote_Addr (发出请求的客户端的IP地址))定义环境variables。
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的第二个参数是一个正则expression式,所以如果你想使用裸IP,像192.168.1.1这样的模式(虽然看起来比上面所说的更容易清理点),但还是要注意匹配192.168.101.10。
更新:
SetEnvIf无法访问QUERY_STRING,但每个文档 : –
有关如何匹配查询string的额外信息,请参阅mod_rewrite的RewriteCond指令。
所以像…
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\. RewriteCond %{QUERY_STRING} (^|&)debug= RewriteRule . - [E=LOCAL_LAN_AND_DEBUG:1]
在Apache 2.4中,您可以使用CIDR表示法为单个IP地址或整个子网设置环境variables。 例如。:
<If "-R '93.184.216.34'"> SetEnv myvar1=example </If> <If "-R '93.184.216.0/24'"> SetEnv myvar2=subnet </If>
这些也可以与expression式中的逻辑运算符结合使用:
<If "-R '93.184.216.34' || -R '192.0.32.0/24'"> SetEnv myvar3=both </If>