在php-apache环境中使用robots.txt通过特定url阻止机器人


Block bots by specific urls with robots.txt in php apache environment

奇怪的情况是,Yandex机器人严重超载了我的网站。问题显然是我的,因为我在网站上有一些ajax过滤器是活动的,但如果它们像机器人一样被调用,则会非常重

我试过很多robots.txt,但都没有效果。需要阻止的URL类型如下所示:

 /de/component/customfilters/0-zu-15-eur/nKein+Herstellerf.html?custom_f_116[0]=38&custom_f_116[1]=4c&custom_f_116[2]=39&start=100

但它们是重写的URL,而不是物理的。物理文件夹已在robotx.txt 中被阻止

如何解决这个问题,如何检查Yandex机器人是否没有读取robots.txt文件?

每次编辑robots.txt文件时,我应该重新启动Apache吗?我认为不喜欢htaccess

减轻当前的重负载

如果你的网站目前正承受着来自这个爬网程序的沉重负载,那么对你的robots.txt进行适当的更改可能现在实际上没有帮助。Yandex开发团队中可爱的人确实声称,他们的机器人在爬行之前会访问robots.txt,但我认为,如果爬行已经开始,它可能要等到下次想要爬行时才能读取任何更改。他们可能还有你更改robots.txt之前的缓存副本。你可以查看你的服务器日志,看看他们在更改robots.txt之后是否访问过它。我的猜测可能不是。

还有一种可能性是,一个坏机器人在爬你的网站时假装是Yandex。坏的机器人通常会忽略robots.txt规则。因此,您所做的任何更改都可能正确地影响Yandex,但不会影响坏的机器人。

在任何一种情况下,如果这个爬网程序现在让你的服务器承受沉重的负载,那么你现在就想阻止它们,然后再决定是临时阻止还是永久阻止。

一种方法是在.htacccess:中使用BRowserMatchNoCase指令

BrowserMatchNoCase "Yandex" bots
Order Allow,Deny
Allow from ALL
Deny from env=bots

或者,您可以在.htaccess中使用重写规则,而不是:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(Yandex).*$ [NC]
RewriteRule .* - [F,L]

至于你的robots.txt

无论URL是否被重写,机器人都会抓取它找到的任何URL,除非你不允许该URL。如果您不允许使用物理文件夹,并且URL没有指向该文件夹,那么"不允许"将不起作用。

在你的robots.txt:中尝试这样的东西

Disallow: /de/component/customfilters/

这将要求所有机器人不要抓取任何包含/de/component/customfilters/的URL。如果你只想与Yandex机器人对话,你也可以指定:

User-agent: Yandex  # directives after this line will only apply to Yandex bots.
Disallow: /de/component/customfilters/

如果你想检查Yandex是否正在读取你的robots.txt,他们在这里有一个测试工具:

http://webmaster.yandex.ru/robots.xml(页面为俄语)

如果你只是想让Yandex放慢速度,你可以为Yandex机器人添加一个爬行延迟指令:

User-agent: Yandex # directives after this line will only apply to Yandex bots.
Crawl-delay: 2 # specifies a delay of 2 seconds 

更多信息:https://help.yandex.com/webmaster/controlling-robot/robots-txt.xml#crawl-延迟