При разработке разнообразных по сложности сайтов рано или поздно требуется применение редиректов. Например, для обновления страницы чата или онлайн-трансляции, для перенаправления на правильный адрес в случае «переезда» страницы и т. п.
Правильное использование редиректов или обновления страниц может сделать работу сайта более эффективной и удобной для пользователей. Попробуем перечислить основные приёмы реализации редиректа на сайте.
Редирект (от англ. redirect) — переориентация, перенаправление пользователя на другую страницу сайта. Обычно под редиректом подразумевается автоматическая переадресация, без участия пользователя. Редиректом могут называть программное решение (скрипт), которое принудительно перенаправляет пользователя с посещаемой страницы на другую.
Редирект может применяться не только во благо пользователей, но и без их ведома, например, в случаях использования редиректов на сайтах «дорвеях» или для автоматической «накрутки» счетчика посещений сайта.
На заметку! Аккуратное и правильное использование 301-го редиректа старых страниц на новые или старого сайта на новый адрес, позволяет сохранить позиции сайта в поисковых системах. Использование 301-го редиректа передаёт PageRank страницы на новый адрес.
В зависимости от поставленной задачи и возможностей разработчика для выполнения редиректа может применяться:
Как видно из способов реализации, команда на редирект может поступать со стороны браузера (в случае использования яваскриптов или мета-тегов) или от сервера (в случае отправки браузеру специального ответа, содержащего заголовок «Location»). Остановимся подробнее на каждом из способов.
«Приказать» браузеру сделать переход на другую страницу можно средствами языка программирования javascript.
location="http://www.example.com";
document.location.href="http://www.example.com";
window.location.reload("http://www.example.com");
document.location.replace("http://www.example.com");
setTimeout('document.forms["searchform"].Submit.click()', 100);
На заметку! Метод reload() полностью моделирует поведение браузера при нажатии на кнопку «Reload» в панели инструментов. А метод replace() позволяет заместить текущую страницу на другую страницу. При этом посетитель не сможет вернуться на предыдущую страницу с помощью кнопки браузера «Back», так как запись в history о старой странице полностью замещается новой.
В момент выполнения одной из перечисленных выше команд javascript, сразу же произойдёт загрузка новой страницы. Но чаще необходимо делать редирект с задержкой. В javascript для исполнения кода с задержкой Вы можете использовать функцию setTimeout() или setInterval().
Мета-тег редиректа необходимо использовать в заголовке 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 отправку заголовков с редиректом можно сделать с помощью функции 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 обрабатываются сервером «Apache». Приведём несколько рабочих примеров переадресации:
Redirect 301 / http://www.example.com/
RedirectPermanent / http://www.example.com/
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 до отправки необходимых заголовков прямо из скриптов на сервере. Надеемся, не зря!
Делайте удобные и эффективные сайты!
Автор: «Ваш МАСТЕР»