Назад | Перейти на главную страницу

Apache возвращает 429 только ботам для определенных URL

У меня есть веб-сайт 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>