Что такое реферер или как использовать HTTP-заголовок referer

Что такое реферер? Заголовок HTTP referer передается с браузера на сервер, чтобы сообщить, на какой странице читатель находился перед тем, как перешел на вашу. Данная информация может быть использована, чтобы предоставить специальные предложения для целевых посетителей, перенаправить клиентов или сгруппировать посетителей сайта по определенным критериям.

Можно использовать такие языки, как JavaScript, PHP или ASP, чтобы считать информацию, содержащуюся в заголовке referer. А также добавить строки кода в файл .htaccess.

Сбор из referer с помощью PHP, JavaScript и ASP

PHP хранит информацию из referer в системной переменной HTTP_REFERER. Чтобы отобразить ее на PHP-странице, нужен следующий код:

if(isset($_SERVER['HTTP_REFERER'])) {
  echo $_SERVER['HTTP_REFERER'];
}

Он проверяет, содержит ли переменная значение, а затем выводит его на экран. Вместо echo $_SERVER['HTTP_REFERER']; можно задать строки скрипта таким образом, чтобы проверить различные referer.

JavaScript использует для чтения server http referer DOM. Так же, как в случае с PHP, нужно проверить, содержит ли заголовок значение. Если вы хотите управлять переменно, то сначала нужно установить данную переменную. Вот как отобразить referer на странице с помощью JavaScript.

Обратите внимание, что DOM использует альтернативное написание referer:

if (document.referrer) {
  var myReferer = document.referrer;
  document.write(myReferer);
}

После этого можно использовать заголовок в скрипте с переменной myReferer.

ASP, как и PHP, устанавливает referer в качестве системной переменной. После чего нужно получить данную информацию следующим образом:

if (Request.ServerVariables("HTTP_REFERER")) {
  Dim myReferer = Request.ServerVariables("HTTP_REFERER")
Response.Write(myReferer)
}

Также можно настроить скрипт с использование переменной myReferer.

После того как вы получили referer, что с ним делать?

После того, как вы получили информацию из HTTP referer, ее можно использовать в скриптах сайта. Например, чтобы вывести данные о том, откуда пришли посетители. Но гораздо интереснее использовать заголовок для отображения различной информации в зависимости от того, откуда пришли пользователи.

Общее приветствие

Можно вывести URL-адрес из referer в верхней части страницы в общем приветствии:

<script>
  if (document.referrer) {
    document.write("<p>Thank you for visiting from " +
document.referrer + "</p>");
  } </script>

Приветствие посетителей из поисковой системы

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

<script>
  if (document.referrer) {
    searchEngine = /google.com/;
    if (searchEngine.test(document.referrer)) {
      document.write("<p>Welcome Google visitor!</p>");
    }
  }
</script>

Передача информации в формы

Если у вас на сайте есть ссылка, кликнув по которой посетители могут сообщить о проблемах с ресурсом. Люди часто сообщают о проблемах с веб-страницей без указания URL-адреса, на котором она возникла. Но можно использовать информацию из server http referer, чтобы предположить, о какой проблеме на какой странице идет речь.

Этот скрипт добавляет referer в скрытое поле формы:

<script>
  function start() {
    var ref = document.getElementById('referrer');
    ref.value = document.referrer;
  }
  onload = start;
</script>
<input type="hidden" value="" id="referrer" />

Создание специального предложения для определенных посетителей

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

<script>
  if (document.referer == "http://domain/special-offer.htm") {
    var newWin = window.open('http://mydomain/special.htm','special');
  }
</script>

Направление посетителей на другую страницу

Также можно направить людей с определенным HTTP referer на другую страницу. Будьте осторожны, так как Google и другие поисковые системы могут расценить это, как введение в заблуждение, и наказать ваш сайт:

<script>
  if (document.referrer == "http://domain/redirect") {
    location.href = "http://www.newpage.com/";
  }
</script>

Блокирование пользователей по referer с помощью .htaccess

Если вы страдаете от referer-спама с одного домена, можно просто заблокировать его на вашем сайте. Если вы используете Apache с установленным mod_rewrite, тогда можно блокировать спам с помощью нескольких строк кода (rewritecond http referrer, запрет входа без referrer).

Добавьте следующие строки в файл .htaccess:

RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} spammer.com [NC]
RewriteRule .* - [F]

Измените spammer.com на домен, который нужно заблокировать. Не забудьте добавить перед периодами в домене.

Не полагайтесь на referer

Помните, что возможна подмена HTTP referer, поэтому не стоит использовать его для важных страниц. Лучше применять его в качестве дополнения. Но если страница должна быть доступна только конкретным пользователям, то придется установить для нее пароль через файл htaccess.