如何在 robots.txt Disallow 指令中转义 $?

Posted

技术标签:

【中文标题】如何在 robots.txt Disallow 指令中转义 $?【英文标题】:how to escape $ in robots.txt Disallow directive? 【发布时间】:2017-06-13 15:32:44 【问题描述】:

robots.txt 将$ 处理为一个特殊字符来标识模式的结束。

虽然,googlebot 正在从脚本标签中的 JS 模板中解析一些 href,例如:

<a href="$object.path"> $object.name</a>

编码后,google bot 尝试到达mySite.com/$%7Bobject.path%7D,它以 404s 结束。

为了解决这个问题,我想通过向我的 robots.txt 添加匹配指令来禁止抓取此类网址。

但是“按原样”使用 $ 是行不通的:

Disallow: /$%7Bobject.path%7D$

我找到的唯一可行的解​​决方案是使用通配符:

Disallow: /*%7Bobject.path%7D$

不过,我真的很好奇是否有办法逃脱那个特定的 $ 符号?

谢谢。

编辑:

在使用 google robots.txt 测试工具进行更多测试后,我得到了一些奇怪的结果。根据这个工具指令:

Disallow: /*%7Bobject.path%7D$ 

不适用于/$%7Bobject.path%7D,而其他工具告诉我它匹配(如https://technicalseo.com/seo-tools/robots-txt/)。

在谷歌的测试工具中起作用的是将括号未编码的指令放入指令中:

Disallow: /*object.path$

我无法理解它,所以我将这两个版本都放在了我的 robots.txt 中。

【问题讨论】:

我想阻止包含文字 * 的网址,看来我们运气不好 【参考方案1】:

Googlebot 和其他抓取工具支持 $,但它不是机器人排除协议标准的一部分。

该标准不包含任何转义字符,Google 的文档也没有提及。

您是否尝试过使用美元编码?:

Disallow: /%24%7Bobject.path%7D$

【讨论】:

恐怕这不匹配,因为谷歌机器人不会对 $ char 进行百分比编码:/

以上是关于如何在 robots.txt Disallow 指令中转义 $?的主要内容,如果未能解决你的问题,请参考以下文章

不理解这个robots.txt

IIS设置文件 Robots.txt 禁止爬虫

爬虫基础 - Robots协议

网站迁移服务器后CPU内存飙升,设置robots.txt 问题

网站迁移服务器后CPU内存飙升,设置robots.txt 问题

robots.txt文件