При разработке разнообразных по сложности сайтов рано или поздно требуется применение редиректов. Например, для обновления страницы чата или онлайн-трансляции, для перенаправления на правильный адрес в случае «переезда» страницы и т. п.

Правильное использование редиректов или обновления страниц может сделать работу сайта более эффективной и удобной для пользователей. Попробуем перечислить основные приёмы реализации редиректа на сайте.

Редирект (от англ. redirect) — переориентация, перенаправление пользователя на другую страницу сайта. Обычно под редиректом подразумевается автоматическая переадресация, без участия пользователя. Редиректом могут называть программное решение (скрипт), которое принудительно перенаправляет пользователя с посещаемой страницы на другую.

Редирект может применяться не только во благо пользователей, но и без их ведома, например, в случаях использования редиректов на сайтах «дорвеях» или для автоматической «накрутки» счетчика посещений сайта.

Когда полезно применять редирект

  • При переносе сайта на новый домен. Посетителей сайта по старому адресу, желательно, автоматически перенаправлять на другой домен;
  • При перемещении страниц или разделов сайта. Редирект применяется для переадресации пользователей на новый, правильный адрес страницы или раздела. Очень важно для сохранения целостности сайта и доступности информации;
  • Для периодического обновления страницы. Обновление страницы, своего рода частный случай редиректа страницы на саму себя, но с задержкой по времени! Полезная возможность на сайтах с текстовыми онлай-трансляциями, чатах.
  • При продвижении сайта. Редирект может применяться, например, для ускорения «склейки» адресов страниц сайта с префиксом www и без него;

На заметку! Аккуратное и правильное использование 301-го редиректа старых страниц на новые или старого сайта на новый адрес, позволяет сохранить позиции сайта в поисковых системах. Использование 301-го редиректа передаёт PageRank страницы на новый адрес.

Примеры исполнения

В зависимости от поставленной задачи и возможностей разработчика для выполнения редиректа может применяться:

  • «JavaScript» (выполняется на стороне клиента, браузера);
  • мета-тег «Refresh» (выполняется на стороне клиента);
  • скрипт, например, на языке «PHP» (выполняется на стороне сервера);
  • директивы mod_rewrite в файле .htaccess (выполняется на стороне сервера).

Как видно из способов реализации, команда на редирект может поступать со стороны браузера (в случае использования яваскриптов или мета-тегов) или от сервера (в случае отправки браузеру специального ответа, содержащего заголовок «Location»). Остановимся подробнее на каждом из способов.

Редирект с помощью «JavaScript»

«Приказать» браузеру сделать переход на другую страницу можно средствами языка программирования javascript.

Команды javascript для выполнения редиректа (redirect):
  1. location="http://www.example.com";
  2. document.location.href="http://www.example.com";
  3. window.location.reload("http://www.example.com");
  4. document.location.replace("http://www.example.com");
  5. setTimeout('document.forms["searchform"].Submit.click()', 100);
    — эмуляция клика по кнопке отправки формы. Подобный приём редиректа частенько используют строители дорвеев.

На заметку! Метод reload() полностью моделирует поведение браузера при нажатии на кнопку «Reload» в панели инструментов. А метод replace() позволяет заместить текущую страницу на другую страницу. При этом посетитель не сможет вернуться на предыдущую страницу с помощью кнопки браузера «Back», так как запись в history о старой странице полностью замещается новой.

В момент выполнения одной из перечисленных выше команд javascript, сразу же произойдёт загрузка новой страницы. Но чаще необходимо делать редирект с задержкой. В javascript для исполнения кода с задержкой Вы можете использовать функцию setTimeout() или setInterval().

Mета-тег «Refresh»

Мета-тег редиректа необходимо использовать в заголовке html страницы, между тегами <head></head>. Подобный мета-тег часто используют на страницах, которые требуют постоянного периодического обновления. Например, на сайтах с онлайн-трансляциями матчей и т. п. событий.

Пример мета-тега для обновления страницы с задержкой по времени:

<meta http-equiv="refresh" content="0; url= http://www.example.com" />,

где 0 — значение задержки в секундах, по истечении которой необходимо сделать переадресацию пользователя на новый адрес url.

Особое внимание следует уделить редиректам, поступающим со стороны сервера. Важно понимать, что редирект бывает временным (статус 302) и перманентным (статус 301, страница перемещена навсегда).

Чтобы браузер выполнил команду редиректа, сервер должен прислать в заголовке, например, следующий ответ:

HTTP/1.1 301 Moved Permanently
Location: http://www.example.com

Подобный ответ сервера, сообщает браузеру посетителя, что запрашиваемая страница навсегда перенесена и доступна по новому адресу (разумеется, домен www.vashmaster.ru в примере мы указали в качестве наглядности).

Как сделать редирект на PHP

Как мы уже заметили ранее, для выполнения редиректа скрипт на сервере должен отправить в браузер посетителя специальный заголовок. В языке программирования PHP отправку заголовков с редиректом можно сделать с помощью функции header().

Пример готового кода PHP:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.example.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>

Делаем редирект средствами .htaccess

Директивы, прописанные в файле .htaccess обрабатываются сервером «Apache». Приведём несколько рабочих примеров переадресации:

  1. Redirect 301 / http://www.example.com/
  2. RedirectPermanent / http://www.example.com/
  3. Redirect 302 / http://www.example.com/

Более сложные решения, но очень полезные, можно использовать при подключенном модуле «Apache» — mod_rewrite. Команды для модуля mod_rewrite прописываются в файле .htaccess.

Пример содержимого файла .htaccess с использованием mod_rewrite:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

Если этот файл .htaccess разместить на другом домене, то любые запросы будут автоматически перенаправляться 301-м редиректом на сайт www.example.com. Адрес посещённой страницы будет сохранён. Подобный редирект можно использовать с купленных «пиаристых» доменов, например, для передачи PR своему основному сайту.

На заметку! 301-й редирект называют безопасным! Данный редирект сообщает, что страница навсегда перенесена на новый адрес. Этот факт хорошо определяется поисковыми системами и практически все поисковые параметры старой страницы передаются новой. Например, такие факторы как ссылочное, PR и т. п. При 301-м редиректе страница на новом адресе как правило не теряет свои позиции в поисковых системах, что делает подобные переносы страниц и разделов сайта незаметными для посетителей и без ущерба трафику из поисковых систем.

Приведём пример файла .htaccess с 301-м редиректом, который часто используется в случае переноса или переименования директории раздела сайта:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^articles(/?)(.+)?$ http://example.com/news/$2 [R=301,L]

Данные директивы mod_rewrite сообщают браузеру посетителя, что старая страница, например, по адресу http://example.com/articles/article-1.html навсегда перенесена и доступна на нашем сайте по новому адресу http://example.com/news/article-1.html.

Иногда возникает необходимость переправить трафик с тестового поддомена на основной домен

Данный способ работает с Apache и .htaccess.

И так, как же сделать перенаправление с поддомена на основной домен c помощью .htaccess?

В общем случае всё выглядит так:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^test.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com%{REQUEST_URI} [R=301,NC,L,QSA]

В заключение, приведём файл .htaccess c универсальным редиректом с домена с www на домен без www:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.([^.]+\.ru)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

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

Делайте удобные и эффективные сайты!

Автор: «Ваш МАСТЕР»