robots.txt 中 Disallow: /*? 的含义

robots.txt 中 Disallow: /*? 的含义

雅虎的 robots.txt包含:

User-agent: *
Disallow: /p/
Disallow: /r/
Disallow: /*?

最后一行是什么意思?(“Disallow: /*?”)

答案1

如果它是 Perl 正则表达式:

*?     Match 0 or more times, not greedily

http://perldoc.perl.org/perlre.html

然而,robots.txt遵循一个非常基本的语法,因此,

要匹配字符序列,请使用星号 (*)。例如,要阻止访问所有以 private 开头的子目录:

User-agent: Googlebot
Disallow: /private*/

要阻止访问所有包含问号 (?) 的 URL(更具体地说,任何以您的域名开头,后跟任意字符串,后跟问号,后跟任意字符串的 URL):

User-agent: Googlebot
Disallow: /*?

要指定匹配 URL 的结尾,请使用 $。例如,要阻止任何以 .xls 结尾的 URL:

User-agent: Googlebot 
Disallow: /*.xls$

您可以将此模式匹配与 Allow 指令结合使用。例如,如果 ? 表示会话 ID,您可能希望排除所有包含它们的 URL,以确保 Googlebot 不会抓取重复的页面。但以 ? 结尾的 URL 可能是您想要包含的页面版本。对于这种情况,您可以按如下方式设置 robots.txt 文件:

User-agent: *
Allow: /*?$
Disallow: /*?

Disallow: / *? 指令将阻止任何包含 ? 的 URL(更具体地说,它将阻止任何以您的域名开头,后跟任何字符串,后跟问号,后跟任何字符串的 URL)。

Allow: /*?$ 指令将允许任何以 ? 结尾的 URL(更具体地说,它将允许任何以您的域名开头,后跟一个字符串,后跟一个 ?,且 ? 后没有字符的 URL)。

因此基本上 Yahoo! 上任何类型的查询或搜索都是被机器人禁止的。

令人困惑的是,RFC 中没有列出表达式支持,http://www.robotstxt.org/norobots-rfc.txt

最好的描述是由谷歌提供的,http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449

答案2

* 使其成为通配符。因此,以 ? 结尾的 uri 将受到限制。

相关内容