Php 如何确定客户是通过intranet还是internet访问网站?
情况是,我在IIS 7.5上安装了WordPress,它通过代理访问internet,网站的某些部分将发出客户端外部请求(图像、YouTube视频等),如果用户通过intranet访问网站,则需要用户输入其代理凭据 我想隐藏某些元素的网站,如果它是通过内部网访问,并有它完全功能,如果通过互联网访问 我发现这有点帮助(是的,因为IIS,我把它改成了Php 如何确定客户是通过intranet还是internet访问网站?,php,wordpress,iis,proxy,http-proxy,Php,Wordpress,Iis,Proxy,Http Proxy,情况是,我在IIS 7.5上安装了WordPress,它通过代理访问internet,网站的某些部分将发出客户端外部请求(图像、YouTube视频等),如果用户通过intranet访问网站,则需要用户输入其代理凭据 我想隐藏某些元素的网站,如果它是通过内部网访问,并有它完全功能,如果通过互联网访问 我发现这有点帮助(是的,因为IIS,我把它改成了LOCAL\u ADDR),但由于代理的原因,它失败了 Internet对站点的请求通过同一网络上的代理进行,因此它认为每个请求都是一个intranet
LOCAL\u ADDR
),但由于代理的原因,它失败了
Internet对站点的请求通过同一网络上的代理进行,因此它认为每个请求都是一个intranet请求
那么,如果我知道代理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') ) )
);
}
代理?我想你是指反向代理。如果是这样,许多反向代理会向原始请求添加额外的http头。检查您的请求标题是否包含“X-Forwarded-For”
通常,最后一项是您要查找的内容。
一个C#示例:
这似乎是一个合乎逻辑的解决方案,因为相对于检查客户机是否在同一个域中,针对存在的代理进行测试更容易。
string xff = request.Headers["X-Forwarded-For"];
if (xff != null)
{
string[] clientIPList = xff.Split(',');
string ip = clientIPList.Last();
}