У меня есть веб-сайт Magento, работающий с Apache2, и каждый день я получаю ботов, сканирующих URL-адреса, которые я не хочу, и я хотел бы вернуть 429 для определенных URL-адресов.
я пробовал это в моем htaccess
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Yahoo!\Slurp|semrushbot) [NC]
Redirect 429 /shop/ricerca/
</ifModule>
где мои боты:
yahoo slurp googlebot, яндекс semrush и т. д.
и пути защиты:
/path/toprotect/
/path/to/protect2/
журналы доступа к хвостовику кажется, что мой фрагмент не работает.
кто-нибудь может мне помочь?
в конце концов, если будет слишком грязно, я просто буду использовать nginx в качестве обратного прокси и фильтровать ботов оттуда, где у меня больше опыта
Есть несколько ошибок:
Вы смешиваете директивы mod_rewrite (RewriteCond
) с директивами mod_alias (Redirect
). Вы должны иметь RewriteRule
вместо этого.
Вы не можете использовать HTTP 429 Слишком много запросов с редиректом.
Можно указать любой допустимый код состояния ответа HTTP, используя синтаксис
[R=305]
, с302
код состояния используется по умолчанию, если он не указан. Указанный код состояния не обязательно должен быть перенаправлением (3xx
) код состояния. Однако, если код состояния находится за пределами диапазона перенаправления (300
-399
), тогда строка замены полностью отбрасывается, и перезапись останавливается, как если бы использовалась буква L.
Эскейп-персонаж \
в 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>