外贸英文建站:如何禁止国内同行访问你的英文网站?
假设你要屏蔽国内同行的 IP 访问(同样地,你自己也只能代理方式访问了)。首先你必须有个判断 GEO IP 的模块。在 VPS 上你可以在 nginx 上安装 geo ip 模块,但是安装和使用上还是麻烦了点。并且,如果你用的是虚拟主机,那就无法自己随心所欲安装扩展模块了。
所以,我们可以借用第三方 IP库的 API 接口。比如淘宝的 IP 库,IP138 的 IP 库等等,判断都非常准确。具体代码:
<?php $verification1 = '中国'; //需要屏蔽国家名称1 $verification2 = '摩洛哥'; //需要屏蔽的国家名称2。这里可以类似的方式,定义多个国家。 function get_visitor_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } return $ip; } $ip = get_visitor_ip(); //获取访客IP $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip); //IP数据库来自淘宝。你也可以换成 IP138 的。建议默认。 $address = json_decode($result,true); //判断访客的IP是否来自国家1或国家2 if($address['data']['country'] == $verification1 || $address['data']['country'] == $verification2){ //如果只需要屏蔽国家名称1,这里无需修改,把开头的国家名称2'摩洛哥'改成某个不存在的名称即可,如'冥王星'。 header("location: https://www.baidu.com"); exit(); } ?>
把这部分代码粘贴到你的主题文件夹下面 Header.php 文件里标签的上方。保存。
另外,为了防止国外调用 ip.taobao.com 的判断国家地区的 getIpInfo.php 文件速度慢,最好在上面代码下面再加一行 dns 预解析代码,加快载入文件。
<link rel="dns-prefetch" href="//ip.taobao.com">
(题外话:如果你还是担心淘宝库慢,需要国外的 ip 库 API,也可以去国外 ip 库提供商注册获取 API Key,然后再修改上面的相应代码来更换。建议有技术背景的人可以弄,新手绕过)