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 yandex semrush и т. д.

и путь для защиты:

/path/toprotect/

/path/to/protect2/

журналы доступа к хвостовику, похоже, мой фрагмент не работает.

любой мне можно помочь?

в конце концов, если будет слишком грязно, я Я просто буду использовать nginx в качестве обратного прокси и фильтровать ботов оттуда, где у меня больше опыта

0
задан 16 May 2017 в 12:56
1 ответ

Есть несколько ошибок:

  • Вы смешиваете директивы mod_rewrite ( RewriteCond ) с директивами mod_alias ( Redirect ). Вместо этого у вас должно быть RewriteRule .

  • Вы не можете использовать HTTP 429 Too Many Requests с перенаправлением.

    Можно указать любой допустимый код состояния ответа 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>
2
ответ дан 4 December 2019 в 13:32

Теги

Похожие вопросы