【问题标题】:Pretty URLs and robots.txt漂亮的 URL 和 robots.txt
【发布时间】:2014-01-26 19:05:18
【问题描述】:

假设我们正在使用带有mod_rewrite 或类似内容的漂亮 URL,并且具有以下两条路由:

  • /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/

【问题讨论】:

  • Disallow: /pagenot 不允许 /page-two
  • 你确定那个(考虑到我的问题中robotstxt.org的引用)? :-O
  • @JosephSilber:你错了,确实如此。 URL 没有文件/目录的概念。

标签: php mod-rewrite laravel robots.txt pretty-urls


【解决方案1】:

来自Google's robots.txt specifications

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

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

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

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

【讨论】:

  • 但是如果第二条路线是/pagetwo,这将不适合我的需要,对吧?那会是Allow: /page*吗?
  • 没有。 /page* 将匹配与 /page 完全相同的 url。查看链接。
【解决方案2】:
User-agent: *
Allow: /page-two
Disallow: /page

【讨论】:

  • 请不要发布纯代码答案。它们不太可能让 OP 了解问题所在,并且对于遇到同样问题的人来说通常没用。
【解决方案3】:

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

正确。

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

original robots.txt specification,这根本不可能。

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

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

替代方案:

  • 使用 HTTP 标头 X-Robots-Tag
  • 使用带有robots 名称的meta 元素(但请注意:noindex 是关于索引,而 robots.txt 的Disallow 是关于抓取 )。
  • 更改您网站的 URL 设计。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多