У меня есть веб-сайт 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 в качестве обратного прокси и фильтровать ботов оттуда, где у меня больше опыта
Есть несколько ошибок:
Вы смешиваете директивы 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>