禁止的含义:/*? 在机器人.txt中

3 robots.txt

雅虎的 robots.txt包含:

User-agent: *
Disallow: /p/
Disallow: /r/
Disallow: /*?
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*e-o 5

如果它是 Perl 正则表达式:

*?     Match 0 or more times, not greedily
Run Code Online (Sandbox Code Playgroud)

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

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

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

User-agent: Googlebot
Disallow: /private*/
Run Code Online (Sandbox Code Playgroud)

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

User-agent: Googlebot
Disallow: /*?
Run Code Online (Sandbox Code Playgroud)

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

User-agent: Googlebot 
Disallow: /*.xls$
Run Code Online (Sandbox Code Playgroud)

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

User-agent: *
Allow: /*?$
Disallow: /*?
Run Code Online (Sandbox Code Playgroud)

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

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

所以基本上在 Yahoo! 上进行任何类型的查询或搜索。被机器人禁止。

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

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