Сегодня мой сервер был переполнен сотнями запросов к странице контактов моего сайта (/ contact) всего за 2 минуты.
Я получаю сотни таких строк в моем журнале apache:
*31.13.115.6 - - [18/Jun/2019:10:54:39 +0200] "GET /contacto HTTP/1.1" 301 331 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 232*
*31.13.115.25 - - [18/Jun/2019:10:54:39 +0200] "GET /contacto HTTP/1.1" 301 331 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" 232*
Я не уверен, в чем причина этого, но мой сервер не работал из-за этого. Я хочу убедиться, что этого больше не повторится.
Мой провайдер сервера сказал, что я могу заблокировать эти запросы, добавив правило в свой .htaccess, используя RewriteCond.
Я знаю, что мне придется использовать что-то вроде:
RewriteCond %{HTTP_USER_AGENT} "facebookexternalhit/1.1"
, но я не очень разбираюсь в этом.
Думаю, я знаю, в чем может быть проблема. У меня есть старый сайт oldsite.com, который перенаправляется на мой новый сайт newsite.com. В htaccess на oldsite.com я добавил эти строки для создания перенаправления:
Rules в oldsite.com/.htaccess
RewriteEngine на
RewriteRule ^ (. *) $ Https://www.newsite.com/$1 [R = 301, L]
Это правило было создано, потому что я изменил домен своего сайта , тогда цель этого правила - перенаправить трафик со старого сайта на сайт новостей без ущерба для SEO .
До сих пор все работало нормально. Как вы думаете, это могло быть причиной этого? Если да, как вы думаете, мне нужно изменить это правило на www.oldsite.com/.htaccess вместо добавления других правил на www.newsite.com/.htaccess?
Вы заявляете, что эти запросы относятся к вашей странице контактов / contact
, однако опубликованные вами записи журнала относятся к / contacto
(и extra "o"), и они показывают ответ перенаправления 301, который инициирует второй запрос к вашему серверу (при условии, что поисковый робот следует перенаправлениям). Почему есть 301 редирект? На какую страницу вы перенаправляетесь?
Похоже, они имеют отношение к подлинному «сканеру» Facebook, но, как отмечалось в многочисленных вопросах StackOverflow, поисковый робот Facebook, похоже, склонен к довольно агрессивным действиям!
RewriteCond% {HTTP_USER_AGENT} "facebookexternalhit / 1.1"
Сама по себе директива RewriteCond
(условие) ничего не делает. Вам понадобится RewriteRule
, чтобы что-то сделать.
Например:
RewriteCond %{HTTP_USER_AGENT} ^facebookexternalhit/1\.1
RewriteRule ^contact$ - [F]
Вышеупомянутое будет отправлять 403 Forbidden для всех запросов на / contact
, где пользовательский агент начинается с facebookexternalhit / 1.1
. (Это регулярное выражение, поэтому буквальная точка должна быть экранирована обратной косой чертой.)
Естественно, запрос все еще попадает на ваш сервер приложений (чтобы полностью заблокировать запрос, вам понадобится какой-то прокси), но теперь он мало что делает, когда он делает.
В принятом ответе на связанный вопрос выше говорится об отправке вместо этого статуса 429 Too Many Requests
(вместе с заголовком Retry-After
) - но это только после определенное количество запросов в быстрой последовательности (предоставляется скрипт PHP).