情况是我在IIS 7.5上安装了WordPress,它通过代理访问互联网,网站的某些部分会发出客户端外部请求(图片,YouTube视频等),需要用户输入他们的代理凭证,如果他们通过内部网访问该网站。
我想隐藏网站的某些元素,如果它是通过内部网访问的,并且如果通过互联网访问它可以完全发挥作用。
我发现this SO answer有点帮助(是的,我因为IIS而将其更改为LOCAL_ADDR
)但由于代理而失败了。
对站点的Internet请求通过同一网络上的代理,因此它认为每个请求都是内部网请求。
那么,如果我知道代理IP,如何改进此功能以适应我的情况?
function is_intranet() {
$serverIP = explode('.',$_SERVER['LOCAL_ADDR']);
$localIP = explode('.',$_SERVER['REMOTE_ADDR']);
return (
($serverIP[0] == $localIP[0]) &&
(in_array($serverIP[0],array('127','10','172','192') ) )
);
}
答案 0 :(得分:0)
代理?我想你的意思是反向代理。如果是这样,许多反向代理会向原始请求添加额外的http标头。检查您的请求标头是否包含" X-Forwarded-For" http://en.wikipedia.org/wiki/X-Forwarded-For
一般来说,最后一项是你要找的东西
一个C#示例:
string xff = request.Headers["X-Forwarded-For"];
if (xff != null)
{
string[] clientIPList = xff.Split(',');
string ip = clientIPList.Last();
}