Всем привет! В этой статье хочу наглядно показать как можно сделать редирект ваших пользователей используя для этого PHP, Apache или Nginx.

Для начала стоит пару слов уделить определению того что такое редирект.
Редирект – это автоматическое (принудительное) перенаправление посетителей сайта с одной страницы на другую. Для того чтобы при перенаправлении пользователя он понимал куда и почему его перенаправили то нужно указывать состояние для веб страницы. О состоянии страницы говорит код статуса HTTP.

Редирект коды

Нас интересуют следующие статус-коды редиректов:

  • 300 — Multiple Choices (несколько вариантов на выбор давая возможность сделать выбор пользователю).
  • 301 — Moved Permanently (запрошенный документ перемещен на новый URI).
  • 302 — Moved Temporarily (временный редирект по другому URI).
  • 303 — See Other (затребованный ресурс можно найти по другому адресу).
  • 304 — Not Modified (содержимое не изменялось — это могут быть рисунки, таблицы стилей и т.п.).
  • 305 — Use Proxy (доступ должен осуществляться через прокси-сервер).
  • 306 — Unused (не используется, зарезервирован).

HTML редирект

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

<meta http-equiv="refresh" content="0; URL='http://another-site'" />

Атрибут «content» – это задержка перед тем, как браузер перенаправляет на новую страницу, наше значение 0 секунд. Обратите внимание, что мы не должны устанавливать HTTP-код, но важно дважды проверить странное открытие и закрытие кавычек.

PHP редирект

<?php
header ("Location: dmkweb.ru/page.php",true,302)
?>

Функция header () принимает 3 параметра. Первым мы указываем адрес куда нам нужно перенаправить пользователя, вторым мы указываем необязательный параметр replace, он указывает должен ли заголовок заменить предыдущий аналогичный заголовок или добавить второй заголовок того же типа. По умолчанию он заменяется, но если в качестве второго аргумента передается значение false, то можно задействовать несколько заголовков одного типа, а третьим мы задаем статус код который будет отправлен на страницу.

Apache редирект

Все изменения производятся в файле .htaccess.

Для работы перенаправления а apache должен быть включен модуль mod_rewrite.

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

Стандартный редирект:

Redirect 301 /page1.html http://www.dmkweb.ru/page2.html

Редирект при смене расширения файлов:

Если вы сменили платформу или CMS и при этом у url-ов изменились только расширение, вам может помочь этот редирект.

RedirectMatch 301 (.*)\.php$ https://www.dmkweb.ru $1.html

Редирект с www на обычный домен:

Если вам нужно чтобы ваш веб сервер отдавал ваш сайт без www в начале домена, то следующая конфигурация позволит это сделать.

RewriteCond %{HTTP_HOST} !^www\.dmkweb\.ru
RewriteRule ^(.*)$ https://dmkweb.ru/$1 [R=301,L]

Благодаря этому все запросы на www.dmkweb.ru будут перенаправлены на dmkweb.ru.

Удаление лишних символов в url-е

Иногда в url-е могут появится ненужные элементы, в этом случаи поможет редирект 301:

RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

Было: dmkweb.ru/php///page-1.html

Стало: dmkweb.ru/php/page-1.html

Так же, можно возникнуть потребность заменить в url-е несколько дефисов на один:

RewriteCond %{REQUEST_URI} ^(.*)--(.*)$
RewriteRule . %1-%2 [R=301,L]

Было: dmkweb.ru/php/page—1.html

Стало: dmkweb.ru/php/page-1.html

Про редирект с http протокола на https я упоминал в своей недавней статье.

Nginx редирект

Перенаправлить пользователя с одного url на другой в nginx ещё проще чем на apache.

rewrite ^ http://newsite.ru$request_uri? permanent;

301 редирект с www на обычный домен

server {
    listen       80;
    server_name  mysite.ru;
}
server {
    listen       80;
    server_name  www.mysite.ru;
    return       301 http://mysite.ru$request_uri;
}

Про редирект с http на https для nginx я так же уже писал.

dmkweb.ru Права на контент защищены.