0

假设我们使用漂亮的 URLmod_rewrite或类似的东西,并且有以下两条路线:

  • /page
  • /page-two

现在我们只想禁止/page机器人抓取第一条路线 ( )。

# robots.txt
User-agent: *
Disallow: /page

禁止(http://www.robotstxt.org/orig.html):

... 例如,Disallow: /help 禁止 /help.html 和 /help/index.html,而 Disallow: /help/ 将禁止 /help/index.html 但允许 /help.html。

所以上面的robots.txt例子也是不允许的/page-two,对吗?

完成这项工作的正确方法是什么?

可能是下面的代码?

# robots.txt
User-agent: *
Disallow: /page/
4

3 回答 3

0

来自Google 的 robots.txt 规范

在组成员级别,特别是对于允许和禁止指令,基于 [path] 条目长度的最具体的规则将胜过不太具体(较短)的规则。带有通配符的规则的优先顺序是未定义的。

这意味着您定义它们的顺序无关紧要。在您的情况下,这应该有效:

User-agent: *
Disallow: /page
Allow: /page-

更清楚地说:每个 url 都与所有路径匹配。将/page匹配/page/123,/page/subdirectory/123/whateverishere.html/page-123. /page将使用具有最长匹配路径的指令。如果两者都/page匹配/page-,则/page-使用 for 指令(允许)。如果/page匹配但/page-不匹配,/page则使用 for 指令(禁止)。如果两者都不匹配/page/page-则假定为默认值(允许)。

于 2014-01-26T19:18:48.247 回答
0
User-agent: *
Allow: /page-two
Disallow: /page
于 2014-01-26T19:21:52.573 回答
0

所以上面的 robots.txt 例子也是不允许的/page-two,对吗?

正确的。

完成这项工作的正确方法是什么?

最初的 robots.txt 规范中,这根本不可能。

(请注意,您的最后一个示例不会阻止/page,因为不允许的 URL 必须以/page/包括最后一个斜杠)开头。)

一些解析器理解Allow和/或通配符,可用于解决您的问题,但两者都不是原始规范的一部分。如果您只考虑某些机器人,请查看他们的文档以查看他们支持的 robots.txt 的“扩展”类型。

备择方案:

  • 使用 HTTP 标头X-Robots-Tag
  • 使用meta带有名称的元素robots(但注意:noindex是关于indexing,而 robots.txtDisallow是关于crawling)。
  • 更改网站的 URL 设计。
于 2014-02-01T00:59:50.820 回答