![Apache 仅向机器人返回 429,针对特定的 URL](https://linux22.com/image/704317/Apache%20%E4%BB%85%E5%90%91%E6%9C%BA%E5%99%A8%E4%BA%BA%E8%BF%94%E5%9B%9E%20429%EF%BC%8C%E9%92%88%E5%AF%B9%E7%89%B9%E5%AE%9A%E7%9A%84%20URL.png)
我有一个使用 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
有几个错误:
你混合了 mod_rewrite 指令(
RewriteCond
) 使用 mod_alias 指令 (Redirect
)你应该有RewriteRule
, 反而。你不能使用 HTTP429 请求过多带有重定向。
可以使用语法 指定任何有效的 HTTP 响应状态代码,如果未指定,则默认使用状态代码。指定的状态代码不一定是重定向 (
[R=305]
)状态代码。但是,如果状态代码超出重定向范围 ( - ),则替换字符串将被完全删除,并且重写将停止,就像使用了 L 一样。302
3xx
300
399
\
中的转义字符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>