Код редиректа html – Как сделать редирект: 301, Redirect PHP, html, javascript, переадресация при помощи htaccess

Как сделать редирект (html,php,apache,nginx)

Всем привет! В этой статье хочу наглядно показать как можно сделать редирект ваших пользователей используя для этого 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 Права на контент защищены.

dmkweb.ru

Перенаправления в HTTP — Веб-технологии для разработчиков

URL перенаправление (redirecting), также известное как URL пересылка (forwarding), это метод представления страницы, формы или целого веб-приложения, более чем одним  URL  адресом. HTTP предоставляет специальный вид ответов, HTTP redirect, для выполнения этой операции, используемой для многих целей: временного перенаправления, пока выполняется обслуживание сайта, постоянное перенаправление, для сохранения работоспособности внешних ссылок, после смены архитектуры сайта, страниц прогресса, пока загружается файл, и так далее.

Принцип работы

В HTTP, перенаправление вызывается при отправке сервером специального ответа на запрос: redirects. HTTP перенаправление, это ответы с кодом статуса3xx. Когда браузер получает ответ перенаправления, он использует новый предоставленный URL-адрес и немедленно загружает его: в большинстве случаев переадресация невидима для пользователя, за исключением небольшого влияния производительность.

Есть несколько типов перенаправлений и делятся на три категории: постоянные, временные и специальные перенаправления.

Постоянные перенаправления

Эти перенаправления призваны длиться вечно. Они подразумевают, что оригинальный URL-адрес больше не должен использоваться, а вместо него должен быть использован новый. Поисковые роботы запускают обновление связанного URL-адреса для ресурса в своих индексах.

КодТекстОбработка методаСлучаи использования
301Moved PermanentlyGET методы неизменны.
Другие методы могут быть превращены в GET.[1]
Реорганизация веб-сайта.
308Permanent RedirectМетод и тело запроса  неизменны.Реорганизация веб-сайта, с не-GET ссылками/операциями.

[1] Спецификация не была намерена разрешать изменение метода, но на практике, клиентские приложения делают это. Код 308 был создан чтобы избавиться от неоднозначности в поведении, при использовании не-GET методов.

Временные перенаправления

Иногда, доступ к запрашиваемому ресурсу не может быть предоставлен из определенного места, но может быть предоставлен из другого. В этом случае, могут быть использованы временные перенаправления. Поисковые роботы не запоминают новую, временную ссылку. Временные перенаправления также используются, когда создаются, обновляются, или удаляются ресурсы, которые представляют временные страницы.

КодТекстОбработка методаСлучаи использования
302FoundGET методы неизменны.
Другие методы могут  быть превращены в GET.[2]
Веб-страница недоступна по непредвиденым причинам. В этом случае поисковые роботы не будут обновлять свои ссылки.
303See OtherGET методы неизменны.
Другие превращены в GET (тело запроса теряется).
Используется для перенаправления после PUT или
POST
для предотвращения обновления страницы, что может спровоцировать повторный вызов операции.
307Temporary RedirectМетод и тело запроса  неизменны.Веб-страница недоступна по непредвиденным причинам. В этом случае поисковые роботы не будут обновлять свои ссылки. Лучше чем код 302 когда не-GET ссылки/операции доступны на сайте.

[2] Спецификация не была намерена разрешать изменение метода, но на практике, клиентские приложения делают это. Код 307 был создан чтобы избавиться от неоднозначности в поведении, при использовании не-GET методов.

Специальные перенаправления

В добавок к обычным перенаправлениям, есть 2 специальные.  Перенаправление с кодом 304 (Not Modified) перенаправляет страницу к локальной закешированной копии (которая была устаревшей), и перенаправление с кодом 300 (Multiple Choice) это ручное перенаправление: тело, представленное браузером, как веб-страница, перечисляет возможные перенаправления и пользователь выбирает одно из них.

КодТекстСлучаи использования
300Multiple ChoiceНе так много: варианты перечислены на HTML странице. Может быть обслужен со статусом 200 OK.
304Not ModifiedОбновление кеша: означает, что значение кеша все еще актуально и может быть использовано.

Альтернативные способы указания перенаправлений

HTTP перенаправления это не единственный способ переадресации. Есть еще два метода: HTML перенаправления используют элемент <meta> , и JavaScript перенаправления используют DOM.

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

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

<meta> и установить атрибуту http-equiv значение refresh в блоке <head>. Когда страница отображается, браузер найдет этот элемент и перейдет на указанную страницу.

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

Атрибут content начинается с числа, которое означает, сколько секунд браузер должен ждать, прежде чем перейти по данной ссылке. Всегда устанавливайте 0, для лучшей доступности.

Очевидно, этот метод работает только с HTML страницами и не может использоваться для изображений или другого типа контента.

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

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

Перенаправления в JavaScript создаются установкой значения свойства window.location и новая страница загрузиться.

window.location = "http://www.example.com/";

Как и HTML перенаправления, этот тип не будет работать на всех ресурсах, и очевидно, что работает только на стороне клиента, который выполнит JavaScript. С другой стороны, вы можете вызвать перенаправление, только тогда, когда исполнится определенное условие.

Приоритетность

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

  1. HTTP перенаправления всегда выполняются первыми, пока еще страница даже не была передана,  и конечно же, пока еще не прочитана.
  2. HTML перенаправления (<meta>) выполняються только, если перенаправление не было в выполнено в HTTP.
  3. JavaScript перенаправления используются как последняя возможность перенаправления, и работают только если разрешено выполнение JavaScript на клиентской стороне.

Используйте HTTP перенаправления, когда это возможно, и не используйте элемент <meta>. Если разработчик изменяет HTTP перенаправление и забывает изменить HTML перенаправление , тогда они больше не идентичны, и закончится это вечным циклом или другим ночным кошмаром.

Случаи использования

Есть много случаев для использования перенаправлений, но поскольку они влияют на производительность, то должны использоваться как можно реже.

Связывание доменов

В идеале, есть только одно место, и следовательно один URL адрес, для одного ресурса. Но, есть несколько причин, чтобы иметь альтернативные имена для ресурса (несколько доменов, как с, так и без префикса www или более короткие и лёгкие для запоминания адреса, …). В этих случаях, использовать перенаправление к одному истинному URL адресу, более подходящий вариант, чем дублировать ресурс.

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

  • Расширение вашего сайта. Распространенный случай, когда ваш сайт находится под доменом www.example.com , а доступ к страницам должен быть возможным также из example.com . В этом случае создаются перенаправления для  страниц из example.com к страницам www.example.com. Вы также можете предоставлять обычно используемые имена синонимов или частые опечатки ваших доменных имен.
  • Переезд на другой домен. К примеру, ваша компания была переименована и вы хотите чтобы люди которые обычно использовали старый сайт компании находили вас под новым именем.
  • Принужденный HTTPS. Запросы к HTTP версии вашего сайта буду перенаправлены к HTTPS версии.

Сохранения ссылок рабочими

Когда вы изменяете структуру веб-сайта, URL адреса ресурсов меняются. Даже, если вы можете обновить внутренние ссылки вашего сайта в соответствии с новой схемой имен, у вас нет контроля на URL адресами используемыми внешними ресурсами. Вы не хотите, чтобы эти ссылки не работали, так как они приносят вам ценных пользователей (и помогают вашей SEO), так что вы устанавливаете перенаправления из старых URL адресов на новые.

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

Временные ответы для небезопасных запросов

Небезопасные запросы изменяют состояние сервера и пользователь не должен не нарочно запросить их.  Обычно, вы не хотите чтобы ваши пользователи повторно отправляли PUT, POST или DELETE запросы. Если вы только обслуживаете запросы, простое нажатие кнопки перезагрузки повторно отправит запрос. 

В этом случае, сервер вернет ответ

303 (Смотреть другие), который будет содержать правильную информацию, но если кнопка перезагрузки будет нажата, эта страница просто отобразится повторно без ответа на небезопасный запрос.

Временные ответы на долгие запросы

Некоторые запросы могут потребовать больше времени сервера, например запрос DELETE, который срабатывает по расписанию. В этом случае, ответом будет перенаправление 303 (Смотреть другие), которое связывает со страницей показывающей, что действие было запланировано, и в результате информирует о процессе или позволяет отменить запрос.

Настройка перенаправлений на  распространённых серверах

Apache

Перенаправления могут быть установлены или в настройках сервера, или в каждой директории в файле .htaccess.

У модуля mod_alias есть директивы Redirect и Redirect_Match которые, по умолчанию, устанавливают код ответа 302:

<VirtualHost *:80>
	ServerName example.com
	Redirect / http://www.example.com
</VirtualHost>

URL http://example.com/ будет переенаправлен к http://www.example.com/ (но не к http://example.com/other.html )

Redirect_Match делает то же, но использует регулярное выражение, чтобы определить множество URL адресов, которые подпадут под эффект:

RedirectMatch ^/images/(.*)$ http://images.example.com/$1

Все документы в папке images/ будут перенаправляться к другому домену.

Если вы не хотите устанавливать временное перенаправление, дополнительный параметр (используйте или код статуса HTTP, или ключевое слово permanent) может использоваться чтобы установить другое перенаправление:

Redirect permanent / http://www.example.com
Redirect 301 / http://www.example.com

Также модуль mod_rewrite может использоваться для создания перенаправлений. Они более гибкие, но сложнее в использовании.

Nginx

В Nginx, вы создаете особый серверный блок для контента, который вы хотите перенаправлять:

server {
	listen 80;
	server_name example.com;
	return 301 $scheme://www.example.com$request_uri;
}

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

rewrite ^/images/(.*)$ http://images.example.com/$1 redirect;
rewrite ^/images/(.*)$ http://images.example.com/$1 permanent;

IIS

В IIS, вы используете элемент <httpRedirect> для настройки перенаправлений.

Циклы перенаправлений

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

В большинстве случаев это проблема сервера, и если сервер не может обнаружить её, то отправит код статуса 500 Internal Server Error. Если вы встретите такую ошибку вскоре после редактирования настроек сервера, то это скорее всего цикл перенаправлений.

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

тогда, как Chrome:

This Webpage has a redirect loop

В обоих случаях, пользователь не может ничего сделать (в отличие от ошибки на стороне клиента, например, несоответствие файлов куки или кеша).

Важно избегать циклов перенаправлений, так как они полностью нарушают работу пользователя.

developer.mozilla.org

HTML Редирект в META тегах

  1. SEO Блог
  2. Создание сайта
2011-12-26

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

Как сделать HTML редирект

Для этого типа редиректа вам нужен лишь любой вид доступа к домену: ftp (напрямую или через панели и загрузчики хостинга), через shell — короче неважно как но нам нужно загрузить в корень сайта-домена свой файл index.htm или index.html. Тут очень многое завидит от файла htaccess, к которому раз вы выбрали именно этот вид редиректа по видимому у вас нет доступа. Для того чтобы не ошибиться попробуйте каждый вариант на работоспособность. Но прежде попробуйте вариант с php редиректом, ссылку на правильное составление которого я привел выше. А вдруг прокатит и зачем тогда информировать посетителей если они так и так будут попадать куда нужно.

МЕТА Редирект (перенаправление) посетителей на HTML

Да, этот тип редиректа так-же называют HTML редиректом поскольку для его создания нужны лишь начальные знания html кода и доступ к шаблону первой-основной страницы сайта (домена).
Для перенаправления посетителей по новому адресу нужно закачать на сервер домена, с которого будет производиться перенаправление htm или html файл со следующим содержимым:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<title>Сайт переезжает на ВАШ_НОВЫЙ_АДРЕС_САЙТА</title>
<meta http-equiv="refresh" content="5; url=http://ВАШ_НОВЫЙ_АДРЕС_САЙТА.ru">
</head>
<body>
<h3>Мы перебираемся на ССЫЛКА НА ВАШ НОВЫЙ АДРЕС чтобы у нас была возможность еще больше улучшить наш сервис и качество предоставляемых нами услуг.</h3>
</body>
</html>

Это примерный вариант такого редиректа, цифра «5» означает, что я дал пользователю 5 секунд для того, чтобы он успел прочитать сообщение о переезде сайта, если не хотите ничего сообщать — ставите: «0» итогда текст заключенный в теге BODY тоже будет ненужен — посетитель будет переадресован сразу-же как только его браузер прочитает содержимое мета тега.

Комментарии к статье

← Предыдущая статьяСледующая статья →

Рекомендую

  1. WEBHOST1 — проверенный недорогой хостинг для сайта с PHP и MYSQL.
  2. LOGASTER — генератор логотипов и фавиконок с поддержкой кириллицы.
  3. QComment — наполнение сайтов комментариями и заработок на отзывах.

Категории

Как создать:

Где найти:

Как заработать:

seodiz.ru

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

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