Как сделать редирект для сайта

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

Один из частых сценариев: страница существовала ранее, но со временем стала неактуальной – например, на ней был старый веб-дизайн, но есть точно такой же файл с уже новым оформлением. Чтобы пользователи, приходящие по изначальной ссылке, не видели ошибки «404: Файл не найден», потребуется создать переадресацию на актуальный документ.

Существует множество вариантов сделать редирект. Наиболее распространённые среди них заслужили упоминания в данной статье.

HTTP-коды

Прежде чем перейти к непосредственно написанию скриптов, стоит уделить внимание этой важной теме. Это – коды ответов, которые отправляет сервер (веб-сайт) своим пользователям. Например, очень известная ошибка «404» –HTTP-код «Не найдено», а «403» – «Доступ запрещён». Для редиректов тоже есть свои коды состояния, все они начинаются с цифры «3».

Подробное описание кодам можно найти на сайте MozillaDevelopers.Основными ответами выступают «301» и «302». Первый обозначает перманентный редирект, второй – временный. И хотя для пользователя нет никакой разницы между этими двумя типами перенаправления, с точки зрения SEO очень важно учитывать данный момент: так поисковые роботы, анализирующие сайт, поймут, стоит ли впредь возвращаться к конкретной странице или её лучше игнорировать, чтобы не оказывать нагрузку на сервер.

В PHP отдавать заголовки можно посредством header(). Эта функция должна выводиться перед каким-либо текстом на сайте, иначе потребуется включать буферизацию кода. Если же отказаться от неё, то HTTP-код, отправленный посредством такого скрипта, будет попросту проигнорирован. К слову, точно такое же правило актуально и для файлов cookies, задаваемых через setcookie().

Перенаправления

.htaccess

Файл .htaccess устанавливает правила для конкретной директории и всех входящих в неё папок. Соответственно, при размещении этого документа в «корне» веб-сайта, его правила будут наложены на все файлы (если нет других .htaccess внутри папок, тогда глобальная конфигурация получит малый приоритет). Информация из этого подраздела актуальна только при использовании веб-сервераApache или программы на его основе.

Всё предельно просто: создайте файл .htaccess и укажите следующее:

Redirect 301 /old_folder/old.php http://www.example.net/new_folder/new.php

JS-переадресация

Один из худших вариантов редиректа. Тем не менее, произвести перенаправление таким образом тоже можно. Учтите, что переадресация не сработает у пользователей, отключивших JavaScript: например, поисковых роботов. Они просто проигнорируют конечную страницу, в связи с чем пострадает оптимизация сайта.

<!DOCTYPEHTML>
<html>
<head>
<metacharset=»utf-8″/>
<title>Hello, world!</title>
</head>
<body>
<p>О нет! Что-то перенаправляет меня! А-а-а-а!
<script>
window.onload = function () {
window.location.replace(«https://example.com/new/new.html»);
}
</script>
</body>
</html>

Важно отметить, что JavaScript использует мощности пользовательского устройства. Если на странице представлено большое количество JS-кода, особенно при отсутствии должной вычистки, обладатели несовременных гаджетов могут столкнуться с проблемами в виде зависания и долгой загрузки.

Мета-переадресация

Ещё один не лучший способ перенаправить пользователя. Он более универсален в сравнении с решением на JS, но всё же плох проблемой с заголовками: их понадобится указать отдельно посредством PHP, но тогда непонятно, в чём смысл мета-редиректа. Если же смириться с этим фактом, при переадресации будет отдаваться код «200 OK», говорящий об успешной загрузке страницы без перенаправления. Это введёт в заблуждение ботов систем Google, Яндекс, Yahoo и прочих.

<!DOCTYPEHTML>
<html>
<head>
<metacharset=»utf-8″/>
<title>Hello, world!</title>
<metahttp-equiv=»refresh»content=»5;https://example.net/»>
</head>
<body>
<p>Телепортируюсь через 5 секунд!
</body>
</html>

Своим названием метод обязан использованиюmeta-тегов. По сути, это – решение на «чистом» HTML. Но поскольку его нельзя считать языком программирования, а лишь средством разметки, то и количество функций, доступных для использования, очень невелико. Управлять можно только временем, по истечении которого (с момента загрузки страницы)произойдёт переход. Задаётся числом в секундах.

PHP-переадресация

Наряду с вариантом в виде .htaccessэтот способ тоже является одним из лучших методов перенаправления. Его главное преимущество – возможность подставить редирект в качестве результата условия if-elseif-else, а не только сразу при переходе на страницу.

<?
$new = «https://example.com/test.php»;
header(«Location: «.$new);
exit();

В настройке редиректа на PHP нет ничего трудного.

Что стоит выбрать

Для более удобного понимания предыдущих разделов статьи составлен список ниже:

  • PHP – лучший вариант. Поддерживает переадресацию по результатам какого-либо условия (например, проверки IP пользователя для защиты админ-панели). Минус: возможная необходимость дополнительного включения буфера вывода, которая исправляет ошибку с отправкой заголовков («головная боль» всех PHP-программистов, известная как «cannotmodifyheaderinformation»).
  • .htaccess – обладатель второго места в этой подборке. Работает только на серверах, управляемых Apache(39% сайтов по данным Wappalyzer). Тоже поддерживает некоторые условия срабатывания, но конкурировать с PHP по набору функций этому методу сложно.
  • Meta – решение на HTML, не требующее никаких сторонних библиотек и даже простогоJavaScript. Не отдаёт правильные HTTP-заголовки и срабатывает только после полной загрузки страницы вместе со всеми находящимися на ней скриптами.
  • JS – худший вариант из перечисленных. Не имеет особых преимуществ перед Metaв плане редиректа сразу после загрузки, однако в вопросе возможности создания условий срабатывания всё же обладает некоторыми достоинствами. Например, можно сделать переадресацию по нажатию на какую-либо кнопку, не подключая её к PHP-обработчику. В плане же мгновенного редиректа лучше этот способ не использовать.

Уделение внимания HTTP-заголовкам – важный момент, хотя поначалу может показаться иначе. Они очень важны в плане SEO-оптимизации, а также любой скриптовой обработке запросов. Например, можно настроить парсер, поведение которого зависит от HTTP-кода (как и у практически всех программ подобного рода) во избежание ошибочной обработки лишней информации.

WWW и HTTPS

Одним из популярных вариантов является переадресация с протокола http://на https:// и удаление надписи «www.» из начала домена.

Причина для первого действия – повышение безопасности интернет-ресурса. Пользователи проявят больше доверия к сайту с SSL-сертификатом, чем без него. Более того, многие современные браузеры уведомляют пользователей о небезопасности ресурсов без HTTPS при их посещении. Особенно это касается сайтов с онлайн-оплатой.

Удаление (либо же добавление, на усмотрение вебмастера) «www.» производится исключительно из-за SEO. Поисковые роботы считают сайты без этой плашки и с ней – разными ресурсами, поэтому выдача может дублироваться, а SEO-параметры в виде ИКС Яндекса и PR«Гугла» – некорректно высчитываться. Более того, один из ресурсов может быть ошибочно принят за копию другого, ввиду чего на какой-либо домен пойдёт блокировка.

Здесь лучшим решением выступает задействование .htaccess. Похожие по принципу работы конфигурации доступны для серверов Cowboy, nginx, SimpleHTTPи других.

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

Замените example.com на настоящее доменное имя ресурса.

Примеры использования и возможные ошибки

Дублирование сайта в выдаче

Если веб-сайт показывается дважды даже после проведения действий, описанных в разделе «WWW и HTTPS» этой статьи, нужно перейти в настройки личного кабинета вебмастера в поисковой системе и произвести склейку зеркал. Такие интерфейсы представлены во многих сервисах, включая самые популярные: Google, Bing, Яндекс. Изменения вступят в силу не сразу, а примерно через 2, 3, 4 недели.

Правила объединения веб-сайтов в группы различаются в зависимости от конкретного сервиса. Яндекс подготовил инструкцию, актуальную для собственных поисковых алгоритмов, и идентичную принципам работы ботов у некоторых других проектов.

Ошибка модификации заголовков в PHP

Эта проблема существует примерно столько же, сколько и функциональность PHP по управлению HTTP-заголовками. Избежать её очень просто – достаточно ввести ob_start();в самое начало кода. Если документ начинается HTML-содержимым, можно попробовать сместить его вниз – так, чтобы заголовки отправлялись раньше контента. Если же это невозможно, то ob_start(); нужно поставить не в начало PHP-скрипта, а в первую строчку всего документа.

<?ob_start();?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset=»utf-8″ />
<title>Hello, World!</title>
</head>
<body>
<p>1234567890
<?
$content = «X-CUSTOM-HEADER: 123»;
header($content);
echo $content;
?>
<p>Пример взаимодействия заголовков с<i>ob_start();</i>. Если не вызвать эту функцию, HTTP-заголовок<i>X-CUSTOM-HEADER</i>и его значение<i>123</i>проигнорируются.
</body>
</html>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *