我遇到了robots.txt的问题。
我想禁止http://example.com/forbidden并允许http://example.com的任何其他子目录。通常,语法是:
User-agent: *
Disallow: /forbidden/
但是,我不希望恶意机器人能够看到/ forbidden /目录完全存在 - 页面上没有任何链接到它,我希望它对每个人都完全隐藏,除了那些知道它首先在那里。
有没有办法实现这个目标?我的第一个想法是在子目录本身放置一个robots.txt,但这没有任何效果。如果我不希望我的子目录被良性或恶意机器人编入索引,我是否更安全地将它列在robots.txt上或者根本没有列出或链接到它?
答案 0 :(得分:2)
即使你没有链接到它,抓取工具也无论如何都会找到这些网址:
所以你应该阻止它们。有两种变体(如果您不想使用访问控制):
meta
- robots
(当然,这两种变体仅适用于礼貌机器人)
您可以在不使用完整文件夹名称的情况下使用robots.txt:
User-agent: *
Disallow: /fo
这会阻止以fo
开头的所有网址。当然,您必须找到与您仍希望编入索引的其他网址不匹配的字符串。
但是,如果抓取工具以某种方式找到被阻止的页面(参见上文),它仍然可以将URL添加到其索引中。 robots.txt只允许对网页内容进行抓取/索引,但不禁止使用/添加/链接网址。
但是,使用meta
- robots
,您甚至可以禁止为网址编制索引。将此元素添加到要阻止的页面的head
中:
<meta name="robots" content="noindex">
对于HTML以外的文件,有HTTP标头X-Robots-Tag
。
答案 1 :(得分:1)
最好不要在robots.txt中列出它。那个文件纯粹是建议性的;表现良好的机器人将遵守它所提出的要求,而粗鲁或恶意的机器人可能会将其用作可能有趣的目标列表。如果您的站点不包含指向/forbidden/
目录的链接,那么在任何情况下都没有机器人会找到一个执行相当于字典攻击的机器人,可以通过fail2ban或类似的日志拖网机来解决;在这种情况下,包括robots.txt中的目录最多也没有额外的好处,并且最坏的线索是攻击者可能存在他可能没有找到的东西。