Apache 仅向机器人返回 429,针对特定的 URL

Apache 仅向机器人返回 429,针对特定的 URL

我有一个使用 Apache2 的 Magento 网站,每天都会有机器人抓取我不想抓取的 URL,我想为特定的 URL 返回 429。

我已经在我的 htaccess 中尝试过了

<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Yahoo!\Slurp|semrushbot) [NC]
Redirect 429 /shop/ricerca/
</ifModule>

我的机器人在哪里:

雅虎 slurp googlebot yandex semrush 等

需要保护的路径为:

/path/toprotect/

/path/to/protect2/

跟踪访问日志似乎我的代码片段不起作用。

有人可以帮助我吗?

最终,如果太乱,我将使用 nginx 作为反向代理,并从那里过滤机器人,因为我有更多经验

答案1

有几个错误:

可以使用语法 指定任何有效的 HTTP 响应状态代码,如果未指定,则默认使用状态代码。指定的状态代码不一定是重定向 ( [R=305])状态代码。但是,如果状态代码超出重定向范围 ( - ),则替换字符串将被完全删除,并且重写将停止,就像使用了 L 一样。3023xx300399

  • \中的转义字符Yahoo!\ Slurp用于转义您缺少的空格。

经过这些修正后的结果,将所有内容重定向到/shop/ricerca/

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} (Yahoo!\ Slurp|semrushbot) [NC]
    RewriteRule "(.*)" "/shop/ricerca/" [L,R=302]
</IfModule>

或者,如果您不尝试重定向到/shop/ricerca/但使用以下命令保护它429 Too Many Requests

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} (Yahoo!\ Slurp|semrushbot) [NC]
    RewriteRule "^/shop/ricerca/(.+)" - [R=429]
</IfModule>

相关内容