nginx or apache前端禁收录,爬虫,抓取
一、Nginx 規(guī)則
直接在 server ?中新增如下規(guī)則即可:
################################################# # 禁止蜘蛛抓取動態(tài)或指定頁面規(guī)則 By 張戈博客 # # 原文地址:http://zhangge.net/5043.html # # 申 明:轉(zhuǎn)載請尊重版權(quán),保留出處,謝謝合作! # ################################################# 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; #### 新增規(guī)則【開始】 #### #初始化變量為空 set $deny_spider ""; #如果請求地址中含有需要禁止抓取關(guān)鍵詞時,將變量設(shè)置為y: if ($request_uri ~* "\?replytocom=(\d+)|\?p=(\d+)|/feed|/date|/wp-admin|comment-page-(\d+)|/go") { set $deny_spider 'y'; } #如果抓取的UA中含有spider或bot時,繼續(xù)為變量賦值(通過累加賦值間接實(shí)現(xiàn)nginx的多重條件判斷) if ($http_user_agent ~* "spider|bot") { set $deny_spider "${deny_spider}es"; } #當(dāng)滿足以上2個條件時,則返回404,符合搜索引擎死鏈標(biāo)準(zhǔn) if ($deny_spider = 'yes') { return 403; #如果是刪除已收錄的,則可以返回404 break; } #### 新增規(guī)則【結(jié)束】 #### #以下規(guī)則略...| 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; ????#### 新增規(guī)則【開始】 #### ????#初始化變量為空 ????set$deny_spider""; ????#如果請求地址中含有需要禁止抓取關(guān)鍵詞時,將變量設(shè)置為y: ????if($request_uri??~*"\?replytocom=(\d+)|\?p=(\d+)|/feed|/date|/wp-admin|comment-page-(\d+)|/go"){ ???????? set$deny_spider'y'; ????} ????#如果抓取的UA中含有spider或bot時,繼續(xù)為變量賦值(通過累加賦值間接實(shí)現(xiàn)nginx的多重條件判斷) ????if($http_user_agent~*"spider|bot"){ ???? set$deny_spider"${deny_spider}es"; ????} ????#當(dāng)滿足以上2個條件時,則返回404,符合搜索引擎死鏈標(biāo)準(zhǔn) ???? if($deny_spider='yes'){ ???????? return403;#如果是刪除已收錄的,則可以返回404 ???????? break; ???? } ???? #### 新增規(guī)則【結(jié)束】 #### #以下規(guī)則略... |
Ps:就是將上述代碼中“新增規(guī)則【開始】”到“新增規(guī)則【結(jié)束】”內(nèi)容添加到我們網(wǎng)站的 Nginx 配置-- server 模塊 中的 root 指令之后即可。
二、 Apache規(guī)則
Apache 測試了半天總是500錯誤,暫時先放棄了,有時間再來調(diào)整!
我自己測試寫的規(guī)則如下,感興趣的朋友可以自行測試看看,也許是我環(huán)境的問題。
RewriteEngine On 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]| 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,又匹配了禁止關(guān)鍵詞的抓取,直接返回403(如何返回404,有知道的朋友請留言告知下,測試成功的朋友也敬請分享一下代碼,我實(shí)在沒時間折騰了。)
三、PHP代碼版
/** * PHP比robots更徹底地禁止蜘蛛抓取指定路徑代碼 By 張戈博客 * 原文地址:http://zhangge.net/5043.html * 申 明:原創(chuàng)代碼,轉(zhuǎn)載請注保留出處,謝謝合作! * 使用說明:將一下代碼添加到主題目錄的functions.php當(dāng)中即可。 */ 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內(nèi)容,每個關(guān)鍵詞用分隔符隔開,需注意特殊字符的轉(zhuǎn)義 $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('請勿采集本站,因?yàn)椴杉恼鹃L木有小JJ!'); } else { //如果發(fā)現(xiàn)是蜘蛛,并且抓取路徑匹配到了禁止抓取關(guān)鍵詞則返回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(有朋友說內(nèi)鏈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 * 申?? 明:原創(chuàng)代碼,轉(zhuǎn)載請注保留出處,謝謝合作! * 使用說明:將一下代碼添加到主題目錄的functions.php當(dāng)中即可。 */ 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內(nèi)容,每個關(guān)鍵詞用分隔符隔開,需注意特殊字符的轉(zhuǎn)義 ????$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('請勿采集本站,因?yàn)椴杉恼鹃L木有小JJ!'); ????}else{ ????????//如果發(fā)現(xiàn)是蜘蛛,并且抓取路徑匹配到了禁止抓取關(guān)鍵詞則返回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(有朋友說內(nèi)鏈404對SEO不太友好) ???????????? header("status: 403 Forbidden"); ?????????????? ?????????????? ????????} ????} } |
使用很簡單,將上述PHP代碼添加到主題目錄下放 functions.php 當(dāng)中即可。
四、測試效果
測試效果很簡單,直接利用百度站長平臺的抓取診斷工具即可:
?
點(diǎn)開看看可以發(fā)現(xiàn)真的是返回404:
最后,結(jié)合張戈博客之前分享的《SEO技巧:Shell腳本自動提交網(wǎng)站404死鏈到搜索引擎》即可將這些無用的收錄全部刪除:
有朋友說我這個是黑帽手法,用戶可以訪問,而搜索引擎卻404,很適合淘寶客網(wǎng)站的商品外鏈。是什么手法我不清楚,我只知道實(shí)用就好!特別是張戈博 客那些外鏈,都是用/go?url=這個路徑來跳轉(zhuǎn)的,現(xiàn)在這樣處理后,就算搜索引擎不遵循robots硬是要抓取,就只能抓到404了!
轉(zhuǎn)自張戈的博客
總結(jié)
以上是生活随笔為你收集整理的nginx or apache前端禁收录,爬虫,抓取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7/win10 + VS2015
- 下一篇: HTML中提取图片的SRC路径