Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何确定客户是通过intranet还是internet访问网站?_Php_Wordpress_Iis_Proxy_Http Proxy - Fatal编程技术网

Php 如何确定客户是通过intranet还是internet访问网站?

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

情况是,我在IIS 7.5上安装了WordPress,它通过代理访问internet,网站的某些部分将发出客户端外部请求(图像、YouTube视频等),如果用户通过intranet访问网站,则需要用户输入其代理凭据

我想隐藏某些元素的网站,如果它是通过内部网访问,并有它完全功能,如果通过互联网访问

我发现这有点帮助(是的,因为IIS,我把它改成了
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();
}