7

如何禁止 robots.txt 中的所有动态网址

Disallow: /?q=admin/
Disallow: /?q=aggregator/
Disallow: /?q=comment/reply/
Disallow: /?q=contact/
Disallow: /?q=logout/
Disallow: /?q=node/add/
Disallow: /?q=search/
Disallow: /?q=user/password/
Disallow: /?q=user/register/
Disallow: /?q=user/login/

我想禁止所有以 /?q= 开头的东西

4

2 回答 2

11

你的问题的答案是使用

Disallow: /?q=

我能找到的 robots.txt 上最好的(当前可访问的)来源是Wikipedia。(据称确定的来源是http://www.robotstxt.org,但该网站目前已关闭。)

根据维基百科页面,该标准只定义了两个字段;用户代理:和不允许:。Disallow: 字段不允许显式通配符,但每个“不允许”的路径实际上是一个路径前缀;即匹配以指定值开头的任何路径。

Allow: 字段是非标准扩展,在 Disallow 中对显式通配符的任何支持都是非标准扩展。如果您使用这些,您无权期望(合法的)网络爬虫能够理解它们。

这不是爬虫“聪明”或“愚蠢”的问题:这完全与标准合规性和互操作性有关。例如,任何在“Disallow:”中使用显式通配符执行“智能”操作的网络爬虫对于(假设的)robots.txt 文件来说都是不利的,因为这些字符旨在按字面意思解释。

于 2009-09-29T23:53:02.063 回答
2

正如 Paul 所说,很多 robots.txt 解释器都不太聪明,可能不会像您打算使用它们那样解释路径中的通配符。

也就是说,一些爬虫试图自己跳过动态页面,担心它们可能会陷入具有不同 url 的链接的无限循环中。我假设您之所以问这个问题,是因为您面对的是一个勇敢的爬虫,他正在努力访问这些动态路径。

如果您对特定爬虫有问题,可以尝试通过搜索其 robots.txt 容量并为其指定特定的 robots.txt 部分来具体调查该爬虫的工作原理。

如果您通常只是想禁止此类访问您的动态页面,您可能需要重新考虑您的 robots.txt 设计。

通常情况下,动态参数处理“页面”位于特定目录或特定目录集下。这就是为什么简单地禁用:/cgi-bin 或 /app 并完成它通常非常简单的原因。

在您的情况下,您似乎已将根映射到处理参数的区域。您可能想要颠倒 robots.txt 的逻辑并说如下内容:

User-agent: * 
Allow: /index.html
Allow: /offices
Allow: /static 
Disallow: /

这样,您的允许列表将通过专门添加爬虫应索引的内容来覆盖您的禁止列表。请注意,并非所有爬虫都是一样的,您可能希望稍后改进 robots.txt,为仍然行为不端的任何爬虫添加特定部分。

于 2009-09-29T23:17:24.397 回答