禁止国内同行访问你的英文网站
一、利用 IP 地址进行判断并屏蔽
假设你要屏蔽国内同行的 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(); } ?>
二、利用访问者的浏览器语言类型进行判断并屏蔽
关于方式二,我认为根据浏览者的浏览器语言编码来判断已经足够,所以这里不必再去研究判断访客的操作系统语言的方法了。
每个浏览器都会有个语言编码,如中文最常见的是 zh 或 zh-CN。
利用访问者的浏览器语言类型进行判断并屏蔽:
<?php // 定义变量 lc $lc = ""; // 检查是否已经设置过 HTTP头Accept-Language信息变量 if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); // 这里截取语言编码前两位来判断,如果是中文,转向百度 if($lc == "zh"){ header("location: https://www.baidu.com"); exit(); } ?>
但是,语言编码前2位是 zh 的包含多个国家或地区,比如新加坡、澳门、香港、台湾。
zh中文zh-CN中文(简体)zh-HK中文(香港)zh-MO中文(澳门)zh-SG中文(新加坡)zh-TW中文(繁体)
所以如果你要排除这些情况,可以再做一个 if 判断。稍作修改:
<?php $lc = ''; if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $lg = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } $arr = array('zh-HK','zh-TW','zh-MO','zh-SG'); if(($lc == 'zh') && (!in_array('lg',$arr))){ header('location: https://www.baidu.com'); exit(); } ?>
OK,搞定!这样就不会“误伤”其他中文语言的地区或国家的访问流量了。
当然,如果你想对访问流量进行更细一步的分类,那么还可以像第一种方式代码里调用 $_SERVER[‘HTTP_REFERER’] 的变量,对来路的 URL 进行判断。
方式二太暴力,网站站长也无法访问了,怎么办?
解决方案一、先访问一个添加 Cookie 的页面,再验证 cookie 的值,不符合条件的,屏蔽。符合 Cookie 的,通行。
站长在访问网站前,先访问一个任何人都不知道的页面,获取浏览器特定的cookie,相当于获取通行证。
4.1)在网站 根目录下,放一个 php 文件。
取名 getcookie.php,或 letmein.php,或任何你觉得好记的名字。为了安全起见,你最好自己取个名字,不要用我示范的文件名。
代码如下:
<html> <head> <title></title> </head> <body> <?php setcookie("WebsiteOwner","authorized",time()+259200000);//有效期3000天(3600x24x3000) echo "此浏览器已成功获取免屏蔽cookie,有效期3000天!"; //显示获取cookie提示 header("Refresh:3;url=https://www.liaosam.com") //等待3秒后会自动跳转到你到网站,自己改一下你的网站首页地址 ?> </body> </html>
2)在 主题文件夹下,header.php 文件的 <head> 前放下面的代码
(注意:如果你使用 Avada, Betheme 等主题,如果放 <head> 上面不行,放到 <!DOCTYPE html>
上面即可)
<?php // 定义变量 lc $lc = ""; // 检查是否已经设置过 HTTP头Accept-Language信息变量 // 截取语言编码前两位来判断 if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lg = $_SERVER['HTTP_ACCEPT_LANGUAGE']; $lc = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); $arr = array("zh-HK","zh-TW","zh-MO","zh-SG"); $ck = $_COOKIE["WebsiteOwner"]; // 如果是中文,并且不在其他4个说中文的国家地区内,并且cookie的值不等于预设的值,则转到网站建设页 if(($lc == "zh") && (!in_array("lg",$arr)) && ($ck !== "authorized") ){ header("location: https://www.liaosam.com/new.html"); exit(); } ?>
注意:两部分代码的对应关系我用红色字体标注好了。关于这个cookie值 authorized,你也可以改成别的。如 yes, noproblem, iamgood666 等等。
一般同行来访问,没有正确的cookie值,是进不去的。而你要进去,先访问你网站根目录下的 getcookie.php 或 letmein.php 文件即可。
访问地址:https://www.yourdomain.com/getcookie.php
前面提醒过了,你最好取一个不一样的 php文件名,这个网站根目录下的文件地址只有你知道。访问它,从它那里获取 cookie,然后再跳转或者你手动访问网站,就OK了!
这就解决了方式二的浏览器语言编码通杀的问题。
解决方案二:在 Chrome 设置里修改浏览器内置语言
加了方式二的代码,站长也打不开了。怎么办?打开 Chrome 浏览器的设置,点击菜单 – 设置(Settings) – 高级 – 语言,然后把英语移到顶部。
这样,判断条件里的 $_SERVER[‘HTTP_ACCEPT_LANGUAGE 就改变成你所设置的语言版本了。这时你就可以访问了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)