设为首页 收藏本站
查看: 788|回复: 0

[经验分享] nginx or apache前端禁收录,爬虫,抓取

[复制链接]

尚未签到

发表于 2016-12-28 07:35:15 | 显示全部楼层 |阅读模式
一、Nginx 规则
  直接在 server  中新增如下规则即可:
##################################################   禁止蜘蛛抓取动态或指定页面规则 By 张戈博客       ##   原文地址:http://zhangge.net/5043.html       ##   申    明:转载请尊重版权,保留出处,谢谢合作!     ##################################################server{listen 80;server_name zhangge.net;index index.html index.htm index.php default.html default.htm default.php;root  /home/wwwroot/zhangge.net;#### 新增规则【开始】 #####初始化变量为空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; #如果是删除已收录的,则可以返回404break;}#### 新增规则【结束】 #####以下规则略...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30


 
server
    {
    listen80;
    server_name zhangge.net;
    index index.htmlindex.htmindex.phpdefault.htmldefault.htmdefault.php;
    root  /home/wwwroot/zhangge.net;
    #### 新增规则【开始】 ####
    #初始化变量为空
    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'){
         return403;#如果是删除已收录的,则可以返回404
         break;
     }
     #### 新增规则【结束】 ####
#以下规则略...



  Ps:就是将上述代码中“新增规则【开始】”到“新增规则【结束】”内容添加到我们网站的 Nginx 配置-- server 模块 中的 root 指令之后即可。
二、 Apache规则
  Apache 测试了半天总是500错误,暂时先放弃了,有时间再来调整!
  我自己测试写的规则如下,感兴趣的朋友可以自行测试看看,也许是我环境的问题。
RewriteEngine OnRewriteCond %{HTTP_USER_AGENT} (^$|spider|bot) [NC]RewriteCond %{REQUEST_URI} (/\?replytocom=(\d+)|\?p=(\d+)|\/feed|\/date|\/wp-admin|wp-includes|\/go|comment-page-(\d+)) [NC]RewriteRule ^(.*)$ - [F]
1
2
3
4

RewriteEngineOn
RewriteCond%{HTTP_USER_AGENT}(^$|spider|bot)[NC]
RewriteCond%{REQUEST_URI}(/\?replytocom=(\d+)|\?p=(\d+)|\/feed|\/date|\/wp-admin|wp-includes|\/go|comment-page-(\d+))[NC]
RewriteRule^(.*)$-[F]



  Ps:大概思路和Nginx一致,既匹配了蜘蛛UA,又匹配了禁止关键词的抓取,直接返回403(如何返回404,有知道的朋友请留言告知下,测试成功的朋友也敬请分享一下代码,我实在没时间折腾了。)
三、PHP代码版
/*** PHP比robots更彻底地禁止蜘蛛抓取指定路径代码 By 张戈博客* 原文地址:http://zhangge.net/5043.html* 申   明:原创代码,转载请注保留出处,谢谢合作!* 使用说明:将一下代码添加到主题目录的functions.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 {//如果发现是蜘蛛,并且抓取路径匹配到了禁止抓取关键词则返回404if(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'); //可选择返回404或者403(有朋友说内链404对SEO不太友好)header("status: 403 Forbidden");}}}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

/**
* PHP比robots更彻底地禁止蜘蛛抓取指定路径代码 By 张戈博客
* 原文地址:http://zhangge.net/5043.html
* 申   明:原创代码,转载请注保留出处,谢谢合作!
* 使用说明:将一下代码添加到主题目录的functions.php当中即可。
*/
ob_start("Deny_Spider_Advanced");
functionDeny_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
        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');//可选择返回404或者403(有朋友说内链404对SEO不太友好)
             header("status: 403 Forbidden");
              
              
        }
    }
}



  使用很简单,将上述PHP代码添加到主题目录下放 functions.php 当中即可。
四、测试效果
  测试效果很简单,直接利用百度站长平台的抓取诊断工具即可:
DSC0000.jpg

  点开看看可以发现真的是返回404:
DSC0001.jpg

  最后,结合张戈博客之前分享的《SEO技巧:Shell脚本自动提交网站404死链到搜索引擎》即可将这些无用的收录全部删除:
DSC0002.jpg

  有朋友说我这个是黑帽手法,用户可以访问,而搜索引擎却404,很适合淘宝客网站的商品外链。是什么手法我不清楚,我只知道实用就好!特别是张戈博 客那些外链,都是用/go?url=这个路径来跳转的,现在这样处理后,就算搜索引擎不遵循robots硬是要抓取,就只能抓到404了!
  转自张戈的博客

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-320321-1-1.html 上篇帖子: nginx上搭建HLS流媒体服务器 下篇帖子: Cent Os nginx无法启动: libpcre.so.1/libpcre.so.0: cannot open shared object file解决办
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表