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

Создать правило в 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 я добавил эти строки для создания перенаправления:

Правила в oldsite.com/.htaccess

RewriteEngine on RewriteRule ^(.*)$ https://www.newsite.com/$1 [R=301,L]

Это правило было создано, потому что я изменил домен своего сайта, то цель этого правила - перенаправлять трафик со старого сайта на новостной без ущерба для SEO.

До сих пор все работало нормально. Как вы думаете, это могло быть причиной этого? Если да, то как вы думаете, мне нужно изменить это правило на www.oldsite.com/.htaccess вместо добавления других правил на www.newsite.com/.htaccess?

Вы заявляете, что эти запросы относятся к вашей странице контактов /contactоднако опубликованные вами записи журнала предназначены для /contacto (и дополнительное «о»), и они показывают ответ перенаправления 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 header), но это происходит только после определенного количества запросов в быстрой последовательности (предоставляется скрипт PHP).