网站有时候遇到蜘蛛或者个别国家ip的恶意骚扰、攻击,怎么办呢?对于前者,也就对于守规矩的蜘蛛,那么我们可以通过向 robots.txt 文件中添加规则来限制、禁止其爬取,但对于那些恶意蜘蛛或 IP,robots.txt 显然不适用了。有些人使用插件来屏蔽一些地区的 IP,但是很多插件中对地区/国家的屏蔽是收费的。我这里说一种不用插件、不收费的方法。用此方法可以不让一些国家或一些地区的人/蜘蛛浏览或爬取你的网站。
WordPress平台中,将以下代码保存在php文件中,文件名自定,比如 blocked.php,上传到网站根目录:
- <?php
- header("Content-type: text/html; charset=utf-8");
- $verification1 = '乌克兰'; //需要屏蔽的国家
- $verification2 = '北京市'; //需要屏蔽的地区
- $ip = $_SERVER['REMOTE_ADDR'];// 获取访客IP
- $antecedents = $_SERVER['HTTP_REFERER']; // 访客来路地址
- $result = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip); // IP数据库来自淘宝。
- $address = json_decode($result,true);
- //判断访客是否属所设置地区或国家
- if($address['data']['country'] == $verification1 || $address['data']['region'] == $verification2){
- echo "网站维护中。。。";
- exit();
- }
- ?>
然后在 wp-config.php中添加一句: require_once(ABSPATH . 'blocked.php');
当然,这样的输出结果 http 返回状态码是200,如果我们想自定义状态码,怎么弄呢? 可将
- echo "网站维护中。。。";
- exit();
替换成:
- sleep(999999999); // 设置一个时间为999999秒。空白页,经历漫长的等待时间后才能打开。
- Header("HTTP/1.1 204 No Content");
或者将
- echo "网站维护中。。。";
- exit();
替换成:
- header('HTTP/1.1 403 Forbidden');
- header('Status: 403 Forbidden: Access is denied');
- echo "You do not have permission to view this directory or page using the credentials you supplied.";
- exit();
其他返回代码可以自行搜索一下相关文章。 需要提醒的是,淘宝有一点限制:每个用户的访问频率需小于10qps 。 对于经过 CDN 的网站,该方法可能并不适用,请在 CDN 服务商那里设置有关 Referrer 或 ip 的参数。你也可以通过js代码来实现,这里不多说了。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利