经过2天的search/尝试/失败,我决定在这里发布,我还没有find任何人做同样的事情,也没有发现我试过的东西好像工作正常。 我试图发送一个403的机器人不尊重robots.txt文件(即使下载了几次)。 特别是Googlebot。 它将支持以下robots.txt定义。
User-agent: * Disallow: /*/*/page/
其目的是允许Google浏览他们在网站上可以find的任何内容,但是返回一个403作为以下types的请求。 Googlebot似乎继续嵌套这些链接,在块之后添加分页块:
my_domain.com:80 - 66.x.67.x - - [25/Apr/2012:11:13:54 +0200] "GET /2011/06/ page/3/?/page/2//page/3//page/2//page/3//page/2//page/2//page/4//page/4//pag e/1/&wpmp_switcher=desktop HTTP/1.1" 403 135 "-" "Mozilla/5.0 (compatible; G ooglebot/2.1; +http://www.google.com/bot.html)"
这是一个WordPress的网站顺便说一句。 我不希望这些页面出现,即使在robots.txt信息通过后,他们停了一会儿,才稍后再开始爬行。 它只是永远不会停止….我真的希望真实的人看到这一点。 正如你所看到的,谷歌得到一个403,但是当我在浏览器中自己尝试这个我得到一个404回。 我想让浏览器通过。
root@my_domain:# nginx -V nginx version: nginx/1.2.0
我尝试了不同的方法,使用地图和普通的旧nono如果和他们都是相同的:(在http部分下)
映射$ http_user_agent $ is_bot {
默认为0;
〜爬行| Googlebot | Slurp |蜘蛛| bingbot |跟踪| click | parser |蜘蛛1;
}
(在服务器部分下)
位置〜/(\ d +)/(\ d +)/ page / {
if($ is_bot){
返回403; #请尊重robots.txt文件!
}
}
我最近不得不磨练我的Apache技能,为我的客户做了同样的事情,像这样:
#阻止真正的引擎,不尊重robots.txt,但允许正确的电话通过
# 谷歌
RewriteCond%{HTTP_USER_AGENT} ^ Mozilla / 5 \ .0 \\(compatible; \ Googlebot / 2 \。[01]; \\ + http:// www .google \ .com / bot \ .html \)$ [ NC,OR]
#必应
RewriteCond%{HTTP_USER_AGENT} ^ Mozilla / 5 \ .0 \\(compatible; \ bingbot / 2 \。[01]; \\ + http:// www \ .bing \ .com / bingbot \ .htm \)$ [ NC,OR]
#msnbot
RewriteCond%{HTTP_USER_AGENT} ^ msnbot-media / 1 \。[01] \ \(\ + http:// search \ .msn \ .com / msnbot \ .htm \)$ [NC,OR]
#Sl </s>
RewriteCond%{HTTP_USER_AGENT} ^ Mozilla / 5 \ .0 \(兼容; \ Yahoo!\ Slurp; \ http:// help \ .yahoo \ .com / help / us / ysearch / slurp \)$ [NC]
#阻止所有网页search,其余的可能会通过
RewriteCond%{REQUEST_URI} ^(/ [0-9] {4} / [0-9] {2} / page /)[OR]
#或wpmp_switcher =移动参数集
RewriteCond%{QUERY_STRING} wpmp_switcher =手机
#问题403 /服务ERROROCOCENT
RewriteRule。* - [F,L]
#如果匹配结束
这个问题比我问nginx做的要多一点,但是它的原理差不多,我很难弄清楚nginx。
所以我的问题是,为什么Nginx服务我的浏览器404? 为什么不传递,正则expression式不匹配我的UA:
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.30 Safari/536.5"
有很多例子基于单独的UA来阻止,这很容易。 它也看起来像匹配的位置是最终的,例如,它不是普通用户的“下降”,我相当肯定,这与我在浏览器中获得的404有一些相关性。
作为一个顶部的樱桃,我也希望谷歌忽略参数wpmp_switcher =手机,wpmp_switcher =桌面是好的,但我只是不希望相同的内容被抓取多次。
即使我最终通过谷歌网站pipe理员工具页面添加wpmp_switcher = mobile(要求我注册….)。 也暂停了一段时间,但今天他们又回到了移动部分。
所以简而言之,我需要为nginxfind一个强制robots.txt定义的方法。 有人能掏出他们几分钟的生命,把我推向正确的方向吗?
我真的很感谢任何回应,让我觉得更难;-)
我认为这个问题的最佳解决scheme将涉及多个方面。 他们都没有涉及阻止机器人。
防止WordPress首先生成无效的URL。
找出导致这些URL生成的原因并解决问题。
确定URL是否可以重写。 如果是这样,让WordPress发送301redirect。
对于这些URL中的一些,您可以发送301以redirect到规范URL。 但是对于其他人来说,URL并不是那么容易,因为这个URL是毫无意义的。
虽然最近版本的WordPress发送301redirect的一些页面,插件像永久链接redirect可以帮助涵盖的东西,WordPress的不。 (这个插件可能需要更新或者一些定制;首先仔细testing。)
对于毫无意义的URL,服务410 。
410 Gone HTTP响应告诉请求者该URL不存在,永远不会回来,所以不要再问了。 search引擎可以使用这些数据从索引中删除无效的URL。
应该这样做的示例configuration是(首先testing!):
location ~ #/page/\d+/page/# { return 410; }
尝试在你的地图中使用这个:
~(crawl|Googlebot|Slurp|spider|bingbot|tracker|click|parser|spider)$ 1;
从我记得,你需要使用$终止正则expression式,除非你使用的位置 – 值得一试。
我相信你的第一个定义不起作用,因为你把它放在User-agent:*而不是User-agent:Googlebot下。 至less,这似乎与我的禁止声明有所不同。 去搞清楚。
我在User-agent:Googlebot下的我的robots.txt中添加了以下内容
不允许: /*?
这应该阻止任何包含问号的url被抓取,因为所有这些包含问号,并没有合法的url,至less在我的情况下。
我最近遇到了一个非常类似的问题,在这些无意义的嵌套URL抓取中,我也有“&wpmp_switcher = desktop”或“&wpmp_switcher = mobile”,但也有“mobile?pw_post_layout”(更多详细信息,请访问http://deputycio.com/ 8013 / googlebot-gone-crazy-maybe-not-its-fault希望我不打破任何与此链接的政策,因为它是相关的)。 这个修复是有症状的,所以我仍然对真正的原因感到困惑。 有没有人知道这个问题呢?