robots.txt: 通配符也是没有字符的意思吗?

robots.txt: Does Wildcard mean no characters too?


我有以下示例 robots.txt 和有关通配符的问题:

User-agent: *

Disallow: /*/admin/*

此规则现在是否适用于两个页面:

http://www.example.org/adminhttp://www.example.org/es/admin

那么通配符可以代表没有字符吗?

在最初的robots.txt规范中,Disallow值中的*没有特殊含义,只是一个字符而已。因此,遵循原始规范的机器人将抓取 http://www.example.org/admin 以及 http://www.example.org/es/admin.

一些机器人支持原始 robots.txt 规范的 "extensions",并且流行的扩展将 Disallow 值中的 * 解释为通配符。但是,这些扩展在某处并未标准化,每个机器人可能对其进行不同的解释。

最流行的定义可以说是 from Google Search(Google 表示 Bing、Yahoo 和 Ask 使用相同的定义):

* designates 0 or more instances of any valid character

你的例子

根据上述定义解释 * 时,您的两个网址仍会被抓取。

您的 /*/admin/* 要求路径中有三个斜杠,但是 http://www.example.org/admin 只有一个,而 http://www.example.org/es/admin 只有两个。

(另请注意,User-agentDisallow 行之间不允许有空行。)

你可能想用这个:

User-agent: *
Disallow: /admin
Disallow: /*/admin

这将阻止至少相同,但可能比您想要阻止的更多(取决于您的 URL):

User-agent: *
Disallow: /*admin

请记住,遵循原始 robots.txt 规范的机器人会忽略它,因为它们按字面解释 *。如果你想涵盖这两种机器人,你将不得不添加多个记录:一个带有 User-agent: * 的记录用于遵循原始规范的机器人,以及一个列出所有用户代理的记录(在 User-agent 中)支持通配符。