Как можно запретить пользователям напрямую заходить на сайт, при этом разрешив доступ для поисковых систем?

Здравствуйте! Мне нужно решить задачу, но я не знаю, с чего начать. <br/> <br/> Требуется настроить доступ к сайту так, чтобы его можно было открыть только через переход с поисковой системы, при этом поисковые боты должны видеть сайт как рабочий. Однако, если пользователь вводит прямой адрес сайта в браузере, должна отображаться ошибка. <br/> <br/> Я слышал, что многие реализуют это через CloudFlare, но мне неясна механика этого процесса. <br/> <br/> Например, сайт seeddbaza.quest в поисковой системе открывается, а при прямом входе возникает ошибка: <br/>
  • 27 сентября 2024 г. 16:13
Ответы на вопрос 2
Для реализации задачи, когда пользователи могут заходить на сайт только через переход с поисковых систем, но поисковые системы должны иметь доступ к сайту, можно использовать несколько подходов. Однако важно учитывать, что полное ограничение доступа по этому критерию является достаточно сложной задачей, и нельзя полностью полагаться на заголовки HTTP или IP-адреса, так как злоумышленники могут это обойти.

Вот несколько возможных решений:

### 1. Проверка HTTP_REFERER
Вы можете использовать заголовок `HTTP_REFERER`, который указывает, откуда пришёл пользователь. Когда пользователь переходит по ссылке из поисковой системы, этот заголовок будет содержать адрес поисковой системы. В случае прямого ввода адреса в браузере, заголовок может отсутствовать или быть пустым. 

```php
<?php
$allowed_referers = ['www.google.com', 'yandex.ru', 'bing.com'];

if (!isset($_SERVER['HTTP_REFERER']) || !preg_match('/' . implode('|', $allowed_referers) . '/i', $_SERVER['HTTP_REFERER'])) {
    header('HTTP/1.0 403 Forbidden');
    exit('Вы не можете получить доступ к данному сайту напрямую.');
}
?>
```

Однако нужно заметить, что данный метод не является надежным. Некоторые пользователи могут запретить отправку заголовка `HTTP_REFERER`, а есть возможности для его подделки.

### 2. Использование Cookies
Вы можете установить cookie при первой загрузке сайта через поисковую систему. Если пользователь заходит впервые по прямой ссылке, вы можете проверять наличие этой cookie и выдавать ошибку.

```php
<?php
session_start();

if (!isset($_COOKIE['visited'])) {
    if (!isset($_SERVER['HTTP_REFERER']) || !preg_match('/google|yandex|bing/i', $_SERVER['HTTP_REFERER'])) {
        header('HTTP/1.0 403 Forbidden');
        exit('Вы не можете получить доступ к данному сайту напрямую.');
    }
    setcookie('visited', '1', time() + 3600); // cookie на 1 час
}
?>
```

### 3. CloudFlare
Если вы хотите использовать CloudFlare, то можно настроить правила брандмауэра и создавать правила для разрешения доступа. Например, разрешить доступ только от определенных User-Agent, но это тоже не является полным решением. Однако основное использование CloudFlare в этой ситуации нецелесообразно.

### 4. Серверные настройки
Если у вас есть доступ к серверу, то можно блокировать доступ с помощью конфигурации веб-сервера (например, `.htaccess` для Apache или `nginx.conf` для Nginx). Но стоит учитывать, что подобные правила также могут быть обойдены.

### Заключение
Каждое из описанных решений имеет свои плюсы и минусы, и ни одно из них не может гарантировать абсолютную защиту от прямого доступа. Наилучший подход — это комбинирование нескольких методов. К тому же не забывайте, что блокирование пользователей может негативно сказаться на посещаемости сайта и его репутации.
Необходимо открыть доступ к сайту только через переход с поисковой системы

Запретить вход с пустым referer, разрешить только если реферер из списка: гугл, яндекс, ...

поисковые боты тоже должны видеть сайт как рабочий

Сделать исключение для пользователей, у которых в юзер-агент есть bot, либо точнее указать список: googlebot, yandexbot, и т.д. Эта информация лежит в разделе для вебмастеров каждого поисковика.

У CF почти наверняка есть более удобный вариант - он должен уметь отличать ботов, как по юзер-агент, так и по IP.

P.S.
Но самый лучший вариант - даже близко не подходить к той сфере, которой занимается эта seeddbaza.
Похожие вопросы