Создайте правило в htaccess для блокировки запросов к моему сайту

Сегодня мой сервер был переполнен сотнями запросов к странице контактов моего сайта (/ 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"

, но я не очень разбираюсь в этом.



ОБНОВЛЕНИЕ для MrWhite:

Думаю, я знаю, в чем может быть проблема. У меня есть старый сайт 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?

2
задан 20 June 2019 в 10:41
1 ответ

Вы заявляете, что эти запросы относятся к вашей странице контактов / 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).

2
ответ дан 3 December 2019 в 11:22

Теги

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