php禁止网页抓取(PHP代码如下被收录的地址却是动态地址动态的)

优采云 发布时间: 2021-09-12 13:08

  php禁止网页抓取(PHP代码如下被收录的地址却是动态地址动态的)

  今天查询发现文章是收录早上发的,但是收录的地址是动态的。

  

  是的,我的网站是伪静态的,所以我不想要收录动态页面。机器人添加了禁止爬取这些动态地址和某些路径,但蜘蛛还是每天爬,而且是收录!所以只能强制禁止访问。

  在服务器配置文件ROOT中添加以下代码。

  #### 禁止搜索引擎访问指定文件夹或者路径 【开始】####

#初始化变量为空

set $deny_spider "";

#如果请求地址中含有需要禁止抓取关键词时,将变量设置为y:

if ($request_uri ~* "\?replytocom=(\d+)|\?p=(\d+)|/feed|/date|/wp-admin|comment-page-(\d+)|/go") {

set $deny_spider 'y';

}

#如果抓取的UA中含有spider或bot时,继续为变量赋值(通过累加赋值间接实现nginx的多重条件判断)

if ($http_user_agent ~* "spider|bot") {

set $deny_spider "${deny_spider}es";

}

#当满足以上2个条件时,则返回404,符合搜索引擎死链标准

if ($deny_spider = 'yes') {

return 403; #如果是删除已收录的,则可以返回404

break;

}

#### 禁止搜索引擎访问指定文件夹或者路径【结束】 ####

  

  然后测试,动态取地址失败,静态取地址成功。

  

  另一种方式是将代码直接写入当前主题页面的functions.php中。

  PHP代码如下

  /*禁止蜘蛛抓取指定路径代码*/

ob_start("Deny_Spider_Advanced");

function Deny_Spider_Advanced() {

$UA = $_SERVER['HTTP_USER_AGENT'];

$Request_uri = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];

$Spider_UA = '/(spider|bot|)/i'; //定义需要禁止的蜘蛛UA,一般是spider和bot

//禁止蜘蛛抓取的路径,可以参考自己的robots内容,每个关键词用分隔符隔开,需注意特殊字符的转义

$Deny_path = '/\?replytocom=(\d+)|\?p=(\d+)|\/feed|\/date|\/wp-admin|wp-includes|\/go|comment-page-(\d+)/i';

//如果检测到UA为空,可能是采集行为

if(!$UA) {

header("Content-type: text/html; charset=utf-8");

wp_die('请勿采集本站,因为采集的站长木有小JJ!');

} else {

//如果发现是蜘蛛,并且抓取路径匹配到了禁止抓取关键词则返回404或者403

if(preg_match_all($Spider_UA,$UA) && preg_match_all($Deny_path,$Request_uri)) {

//header('HTTP/1.1 404 Not Found');

//header("status: 404 Not Found");

header('HTTP/1.1 403 Forbidden');

header("status: 403 Forbidden");

}

}

}

  写到最后,在文章发这篇文章的时候,发现发布按钮是灰色的,不可用。检查控制台,发现错误:Failed to load resource: the server Responded with a status of 403()

  原来在上述规则中访问后台目录时会出现403错误。把上述规则中的后台目录删除即可。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线