利用 robots.txt 跟搜索引擎说不!
网页机器人(也被称为网络蛛蛛),是一种自动化信息采集程序。像 Google 这样的搜索引擎使用它们自动地去索引网页;而垃圾邮件发送者则使用它去收集邮件地址;甚至还有你想像不到的用途……
对于友好的网页机器人,我们可以与其“对话”,让它们更好地从我们的网站上采集有用的信息,或者是告诉它们哪些信息根本没用。这时,就出现了一种被称之为“拒绝蜘蛛”的协议(The Robots Exclusion Protocol)
有了这套协议,机器人在访问你的网站之前,会先访问目录下的 /robots.txt 文件,并按协议所规定的规则采集信息。例如
User-agent: *
Disallow: /
其中 User-agent: * 表示对所有的机器人有效;Disallow: / 表示机器人不应该从这个网站采集任何信息。
但是要注意的是:
- 不是所有的机器人都会去理会 /robots.txt ,尤其是那些臭名昭著的垃圾邮件机器人,以及入侵检测机器人。
- /robots.txt 是一份和静态网页一样公开的文件,所有的人都能看开里面的内容。
所以,不要指望****通过 /robots.txt 来隐藏信息。
¶如何创建 robots.txt
/robots.txt 是一份纯文本文件,你可以使用任何文本工具来编辑它。
通常它看起来像这样:
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/
在这个文件中包含三个目录。每个目录都必须独立的一行存在,不能写成
Disallow: /cgi-bin/ /tmp/
另外要注意的是,这个协议并不支持通配符以及正则表达式,User-agent 中的 * 只是一个特殊字符,表示任一个机器人。
下面的规则都是不合法的:
User-agent: \*bot\*
Disallow: /tmp/*
Disallow: *.gif
¶/robots.txt 的一些有效规则
拒绝所有机器人访问服务器上的任何文件
User-agent: *
Disallow: /
不作任何限制(等同于 /robots.txt 不存在)
User-agent: *
Disallow:
拒绝所有机器人访问服务器上的个别目录 通常是一些程序、缓存、垃圾文件
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /junk/
拒绝某一个机器人访问服务器上的任何文件
User-agent: BadBot
Disallow: /
允许某一个机器人访问服务器上的任何文件
对于不同的机器人,需要有一个空行将它们分隔开
User-agent: Google
Disallow:
User-agent: *
Disallow: /
那么,如何让机器人只访问其中某个目录而拒绝其它任何目录?
这是一个很尴尬的情况,因为这份协议里面没有 Allow 这个关键词。
robotstxt.org 给出了一个答案,不过我暂时还没有理解
This is currently a bit awkward, as there is no “Allow” field. The easy way is to put all files to be disallowed into a separate directory, say “stuff”, and leave the one file in the level above this directory:
User-agent: *
Disallow: /~joe/stuff/
拒绝文件的访问
User-agent: *
Disallow: /~joe/junk.html
Disallow: /~joe/foo.html
Disallow: /~joe/bar.html
其它注意事项:
robots.txt必须放置在一个站点的根目录下,而且文件名必须全部小写。