Redirect url

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

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

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


Redirect url

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

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

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

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

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

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

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


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

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

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

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

Код Текст Случаи использования
300 Multiple Choice Не так много: варианты перечислены на HTML странице. Может быть обслужен со статусом 200 OK.
304 Not 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 выведет:


Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

тогда, как Chrome:

This Webpage has a redirect loop

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

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

developer.mozilla.org

Как сделать редирект страницы. Способ 1 — PHP-редирект.

Этот редирект срабатывает без загрузки странички.
Страничка на которую идёт редирект — получает оригинальный REFERER (т.е. таким образом не скрыть откуда был редирект).

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

Рекомендую прочитать мою статью YouTube — инструмент для заработка в интернете, в которой я подробно прошелся о преимуществах использования Ютуба.

Редирект нужно оформлять в файл.php и ОБЯЗАТЕЛЬНО до вывода любых символов. То есть если будет лишний пробел или символ, который выводится на экран (например до знака <?) — то редирект не сработает. Любой вывод на такой страничке (коды метрики и т.п.) не сработают после редиректа, а если написать до редиректа — не сработает редирект.

Как писать редирект, пример, — файл index.php:

<?php
header («Location: //leonov-do.ru/»);
?>

301 и 302 редирект особой разницы не имеют для арбитражника (обычно в SEO больше) — но некоторые рекламные сети принципиально пропускают только один из редиректов. Технически 301 обозначает временный редирект, а 302 — постоянный редирект. Указать можно третьим параметром функции код редиректа, например 302 (второй должен быть true, параметры идут через запятую):

<?php
header («Location: //leonov-do.ru/», TRUE, 302);
?>

Способ 2. htaccess-редирект

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

Например, редирект любого url (из папки где .htaccess) на нужный адрес, вот содержимое .htaccess:

RewriteEngine On
RewriteRule (.*) //leonov-do.ru/

Возможны более сложные редиректы, но такой вариант по своей сути — такой же как и header-редирект (если указывается внешний URL). Возможны вариант переадресации файла — вместо (.*) указать к примеру имя go — будет редиректить адрес go и т.п. Можно указать в одном файле несколько строчек RewriteRule подряд с разными правилами — тогда не нужно писать каждый раз RewriteEngine On.

Способ 3. Простейший javascript-редирект.

Разница этого редиректа в том — что сначала в браузер загружается страничка HTML — потом после её загрузки происходит редирект. Может ощущаться некоторая задержка с появлением «белого экрана» в момент редиректа — в этом небольшой минус перед header-редиректом. Не сработает на компьютерах/браузерах, где отключен javascript. Соответственно REFERER виден именно тот, где был код редиректа (т.е. сама страничка с кодом будет как источник перехода).

Оформляется так (в секции <body> или <head>):

<script type=»text/javascript»>
document.location = '//leonov-do.ru/';
</script>

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

Способ 4. META-refresh-редирект.

Считается одним из наименее надёжных редиректов, но тоже используется, особенно там где нельзя вставить Javascript-код. Также срабатывает уже только после загрузки странички, как и javascript-редирект.

Код нужно вставлять в секцию <head></head> HTML-странички:

<META HTTP-EQUIV=REFRESH CONTENT=»1; URL=//leonov-do.ru/»>

Также делается с задержкой. Можно попробовать менять значение задержки (вместо цифры 1 — указать другое время, 0, 5 секунд и т.п.)
В основном этот вариант не рекомендуется к использованию.

Способ 5. Javascript-редирект с задержкой.

Этот вариант больше подходит если нужно сначала выполнить какой-то Javascript-код (например Метрики и т.п.) — а потом редиректить. 

Не слишком надёжный способ выполнения задержки, т.к. у всех на компьютерах скорость выполнения Javascript может быть разной, но это лучше чем ничего. Т.е. можно рядом поставить код метрики и к примеру задержку в 300 миллисекунд — код Метрики скорее всего успеет выполниться и потом будет редирект. 

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

<script type=»text/javascript»>
<!—
setTimeout ('window.location = «//leonov-do.ru/»;', 300);
//—>
</script>

В данном случае код сработает через 300 миллисекунд (1000 = 1 секунда). Не очень удобно может быть и для посетителя, но если нужен учёт метрикой (и не используются цели на предыдущей страничке на клик по кнопке и т.п.) — это тоже вариант.

Способ 6. Псевдоредирект через IFRAME или FRAMESET.

Почему псевдоредирект? Потому что по факту редиректа не происходит, а просто в фрейме грузится нужная страничка. 

Даже если растянуто на всю страничку, а основная страница не содержит кода или содержит минимальный код (например, Метрика или счётчик).

Как правило, такой редирект, не детектируется рекламными сетями, которые не пропускают редиректные ссылки (например Яндекс.Директ), а в URL-строке видно только адрес оригинальной странички с кодом, а не той что грузится во фрейме.

Вариант А — через FRAMESET:

<html>
<head>
<title>Заголовок странички</title>
</head>
<frameset cols=»100%»>
<frame src=»//leonov-do.ru/»>
<noframes>Ваш браузер не поддерживает отображение фреймов</noframes>
</frameset>
</html>

— в этом случае нельзя разместить другой код (метрику, счётчики и т.п.) на самой страничке, т.к. он все равно не выполнится

Вариант B — через IFRAME:

<html>
<head>
<title>Заголовок странички</title>

</head>
<body style=»margin: 0; padding: 0; overflow: hidden;»>
<iframe src=»//yandex.ru/» height=»100%» width=»100%» frameborder=»0″ scrolling=»yes»></iframe>

Здесь можно код метрики поставить

</body>
</html>

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

Я думаю довольно подробно поведал о всех редиректах, и всем стало более менее понятно как сделать редирект.

leonov-do.ru

В этой статье я расскажу о трёх известных мне способах редиректа (телепортации) броузера на другой URL. Также вы найдете здесь реализацию редиректа на Perl,
PHP, HTML и на JavaScript.
———————————————————————————
Первый способ основан на спецификации протокола HTTP. Каждый HTTP ответ сервера содержит заголовок (header) и тело (body).
Заголовок — это набор служебных полей, который говорит броузеру как интерпретировать информацию в теле HTTP ответа. Например, есть известное всем веб
программистам поле заголовка Content-Type, в это поле записывается тип передаваемых от сервера данных.
В этом уроке нам потребуется другое важное поле заголовка:
Location: URL
Это адрес на который должен телепортироваться броузер. При получении HTTP заголовка с указанным Location, броузер игнорирует тело HTTP ответа и сразу
переходит на указанный URL.

———————————————————————————
  Реализация на Perl.
  В Perl’е сделать редирект очень просто.

print "Location: http://webclass.runn";

Надо отследить, чтобы скрипт посылал эту строку прежде всего. Можно даже сказать,   что если вы хотите перенаправить броузер на другой URL, то вам следует
  послать броузеру только одну строчку, которая указана выше. Обратите внимание   на символы nn в конце строки. Это разделитель между HTTP заголовком и телом   
  HTTP ответа, и он обязательно должен быть указан.

———————————————————————————
  Реализация на PHP.
  В PHP cуществует специальная функция header(), с помощью которой можно указывать   поля HTTP заголовка.
  Для редиректа достаточно написать:

header("Location: http://webclass.ru");

Но опять же, надо помнить, что заголовок посылается перед телом HTTP ответа   и эта строчка кода должна стоять в скрипте перед любой другой операцией вывода.   
  Иначе броузер получит стандартный заголовок, сформированный сервером, и ваша   строчка будет интерпретироваться как просто текстовые данные.
  ———————————————————————————
  Второй способ редиректа основан на возможностях HTML кода. Есть META тэг, специально   предназначенный для перенаправления.
  Использование:

<META http-equiv="refresh" content="0; url=http://webclass.ru">

Здесь в поле content даже можно указать количество секунд, перед тем как броузер   перейдет на указанный URL. Тэг должен использоваться в разделе HEAD.
  Вот пример HTML страницы, для перенаправления:

<HTML> <HEAD> <META http-equiv="refresh" content="0;   url=http://webclass.ru"> </HEAD> <BODY> <H1>Redirect   page</H1> </BODY> </HTML>

  ———————————————————————————
  Третий способ перенаправления основан на использовании JavaScript. Я советую   использовать этот способ тогда, когда нет других возможностей. Из всех описанных   
  здесь методов этот самый ненадежный (можно всегда отключить JavaScript в броузере).

window.location=http://webclass.ru;

Пример:

Код этой формы:

<form><input onClick=window.location="http://webclass.ru"   type=button value=Redirect></form>

wm-help.net

A redirect is when a web page is visited at a certain URL, it changes to a different URL. For instance, a person visits «website.com/page-a» in their browser and they are redirected to «website.com/page-b» instead. This is very useful if we want to redirect a certain page to a new location, change the URL structure of a site, remove the «www.» portion of the URL, or even redirect users to another website entirely (just to name a few).

Let’s say we’ve just moved our website and we want to shut down the old one. However we don’t want all those pages from the old site to give a dreaded 404 Not Found. What we need is for those old links to redirect to the same content on our new site.

Here’s our example: we want old-website.com/blog/post to redirect to new-website.com/blog/post, along with all the other posts that use that same URL format. Also it would be nice if our redirects would report to search engines that this change is permanent so they should update accordingly.

So how do we that? Well, before we start we need to learn a little about HTTP.

HTTP response codes

Every time we enter a URL or make a request from a browser we’re using the Hypertext Transfer Protocol (HTTP). Although this sounds like a really cool name for a sci-fi cop movie it’s actually the process by which we request assets such as CSS, HTML and images from a server. After we’ve sent a request these assets will then give a response like «hey I’m here, let’s go!» (response code HTTP 200 OK). There are many different kinds of HTTP response code, the most familiar perhaps being 404 Not Found; web pages can respond with a 404 status but so can any other asset that we request, whether that’s an image or any other kind of asset.

Every HTTP response is categorized under a certain three digit number, so 404 Not Found is a 4XX status code to clarify that it’s a client error and 200 is in the 2XX category to signify that it’s a success message of some kind. We’re interested in the 3XX category of HTTP response, like 301 Moved Permanently or 302 Found, because these are the status codes specifically set aside for redirects. Depending on the method we choose we won’t necessarily need to know about these codes but it’s essential for others.

In our case we’ll use a 301 redirect because some web browsers or proxy servers will cache this type, making the old page inaccessible which, in this instance, is exactly what we want.

So how do we actually go about redirecting a web page?

HTML redirects

Perhaps the simplest way to redirect to another URL is with the Meta Refresh tag. We can place this meta tag inside the <head> at the top of any HTML page like this:

<meta http-equiv="refresh" content="0; URL='http://new-website.com'" />

The content attribute is the delay before the browser redirects to the new page, so here we’ve set it to 0 seconds. Notice that we don’t need to set a HTTP status code, but it’s important to double check the weird opening and closing of the quotes above (there are quotes within quotes, so they need to be different types and matching).

Although this method is the easiest way to redirect to a web page there are a few disadvantages. According to the W3C there are some browsers that freak out with the Meta refresh tag. Users might see a flash as page A is loaded before being redirected to page B. It also disables the back button on older browsers. It’s not an ideal solution, and it’s discouraged to use at all.

A safer option might be to redirect the website with JavaScript.

JavaScript redirects

Redirecting to another URL with JavaScript is pretty easy, we simply have to change the location property on the window object:

window.location = "http://new-website.com";

JavaScript is weird though, there are LOTS of ways to do this.

window.location = "http://new-website.com";  window.location.href = "http://new-website.com";  window.location.assign("http://new-website.com");  window.location.replace("http://new-website.com");

Not to mention you could just use location since the window object is implied. Or self or top.

With the location object we can do a lot of other neat stuff too like reload the page or change the path and origin of the URL.

There are a few problems here:

  1. JavaScript needs to be enabled and downloaded/executed for this to work at all.
  2. It’s not clear how search engines react to this.
  3. There are no status codes involved, so you can’t rely information about the redirect.

What we need is a server side solution to help us out by sending 301 responses to search engines and browsers.

Apache redirects

Perhaps the most common method of redirecting a web page is through adding specific rules to a `.htaccess` on an Apache web server. We can then let the server deal with everything.

`.htaccess` is a document that gives us the ability to give orders to Apache, that bit of software that runs on the server. To redirect users to our new site we’ll make a new .htaccess file (or edit the existing one) and add it to the root directory of the old website. Here’s the rule we’ll add:

Redirect 301 / http://www.new-website.com

Any page that the user visits on the old website will now be redirected to the new one. As you can see, we put the HTTP response code right at the front of the redirect rule.

It’s worth mentioning that this kind of redirect only works on Linux servers with the mod_rewrite enabled, an Apache module which lets us redirect requested URLs on the server by checking a certain pattern and, if that pattern is found, it will modify the request in some way. Most hosting companies have this enabled by default, but contacting them is your best bet if there’s a problem. If you’re looking for more info on mod_rewrite then there’s a great tutorial on tuts+. There are also lots of .htaccess snippets here on CSS-Tricks.

Back to our example, if we use the code above then a user will go to «old-website.com/blog/post» and be sent to «new-website.com» which isn’t very user friendly because they won’t see actual page they asked for. Instead, we’ll add the following rule to our `.htaccess` file in order to redirect all those blog posts to the right place:

RedirectMatch 301 /blog(.*) http://www.new-website.com$1

Or perhaps we want to redirect individual pages very specifically. We can add the rules like this:

Redirect 301 /page.html http://www.old-website/new-page.html

And for errors we can redirect users to our 404 page (probably chock full of puns and gifs):

<IfModule mod_rewrite.c>   RewriteEngine on   RewriteCond %{REQUEST_FILENAME} !-f   RewriteCond %{REQUEST_FILENAME} !-d   RewriteRule .* 404.html [L]  </IfModule>

First we check if we have the mod_rewrite module is available then we can turn it on and, if the file or directory is not found, we send the user off to our 404 page. It’s sort of neat that the contents of the page they see will be from the 404.html file whilst the requested URL will remain the same.

If you’re not comfortable with messing around with `.htaccess` files and you have WordPress installed then there’s a nifty extension that can deal with this stuff for us.

Nginx redirects

If your server is running Nginx as the web server, then in the `nginx.conf` file you can add a server block to handle these redirect requests:

server {   listen 80;   server_name old-website.com;   return 301 $scheme://new-website.com$request_uri;  }

Again we’re using the 301 HTTP response and, with the scheme variable, we’ll request http:// or https:// depending on what the original website used. It might be a good idea to take a closer look at the HTML5 Boilerplate nginx.conf for best practices on other Nginx related things.

Lighttpd redirects

For those servers running a Lighttpd web server, you make a redirect by first importing the mod_redirect module and using url.redirect:

server.modules = (   "mod_redirect"  )    $HTTP["host"] =~ "^(www.)?old-website.com$" {   url.redirect = (   "^/(.*)$" => "http://www.new-website.com/$1",   )  }

PHP redirects

With PHP we can use the header function, which is quite straightforward:

<?php    header('Location: http://www.new-website.com');   exit;  ?>

This has to be set before any markup or content of any other sort, however there is one small hitch. By default the function sends a 302 redirect response which tells everyone that the content has only been moved temporarily. Considering our specific use case we’ll need to permanently move the files over to our new website, so we’ll have to make a 301 redirect instead:

<?php   header('Location: http://www.new-website.com/', true, 301);   exit();  ?>

The optional true parameter above will replace a previously set header and the 301 at the end is what changes the response code to the right one.

Ruby on Rails redirects

From any controller in a Rails project, we can quickly redirect to a new website with redirect_to and the :status option set to :moved_permanently. That way we override the default 302 status code and replace it with Moved Permanently:

class WelcomeController < ApplicationController   def index   redirect_to 'http://new-website.com', :status => :moved_permanently    end  end

In Rails 4 there’s any easier way to handle these requests where we can add a redirect in the routes.rb file which automagically sends a 301 response:

get "/blog" => redirect("http://new-website.com")

Or if we want to redirect every article on the blog to posts on the new website we can do so by replacing the above with the following:

get "/blog/:post" => redirect("http://new-website.com/blog/%{post}")

.NET redirects

I’ve never written anything with the .NET framework before but it looks like there’s clear documentation over on Microsoft’s Developer Network.

Node.js redirects

Here’s a very quick local setup that explains how redirects work with Node. First we include the http module and create a new server, followed by the .writeHead() method:

var http = require("http");    http.createServer(function(req, res) {   res.writeHead(301,{Location: 'http://new-website.com'});   res.end();  }).listen(8888);

If you make a new file called index.js and paste the code above and then run node index.js in the command line you’ll find the local version of the website redirecting to new-website.com. But to redirect all the posts in the /blog section we’ll need to parse the URL from the request with Node’s handy url module:

var http = require("http");  var url = require("url");    http.createServer(function(req, res) {   var pathname = url.parse(req.url).pathname;   res.writeHead(301,{Location: 'http://new-website.com/' + pathname});   res.end();  }).listen(8888);

Using the .writeHead() function we can then attach the pathname from the request to the end of URL string. Now it’ll redirect to the same path on our new site. Yay for JavaScript!

Flask redirects

With the Flask framework on top of Python we can simply create a route that points to subpages with the redirect function, again 301 has to be an option that is passed in at the end because the default is set to 302:

@app.route('/notes/<page>')  def thing(page):   return redirect("http://www.new-website.com/blog/" + page, code=301)

If you know of any other tricks to redirect a web page add a comment below and I’ll update this post with the latest info.

css-tricks.com


Навигация: Главная — Интернет — Перенаправление URL, Redirect

Перенапрвление URL. Redirect

Redirect — техника, применяемая во Всемирной паутине для того, чтобы Веб-страница была доступна под несколькими URL.

Редирект используют для перенаправления посетителей сайта с одной страницы на другую.

Причины использования редиректа:

– смена доменного имени

– добавление слэш ( ⁄ ) в конце адреса (ссылки)

– смена движка (CMS) сайта

– нежелание показывать ссылку до перехода по ней («реферальная ссылка»)

Статус-коды редиректов:

«300» Multiple Choices (несколько вариантов на выбор)

«301» Moved Permanently (перемещено навсегда)

«302» Temporary Redirect (временный редирект)

«303» See Other (затребованный ресурс можно найти по др. адресу)

«304» Not Modified (содержимое не изменялось — это могут быть рисунки, таблицы стилей и т.п.)

«305» Use Proxy (доступ должен осуществляться через прокси)

«306» (Unused) (не используется)

Примеры организации редиректа:

html редирект:

* вставлять в раздел HEAD документа HTML

 <meta http-equiv="refresh" content="seconds;URL-to-redirect"> 

Наглядно это будет выглядеть так (перенаправит запрашиваемую страницу на страницу http://example.com через 3 секунды):

 <meta http-equiv="refresh" content="3;http://example.com"> 

.htaccess редирект:

 Redirect <status *необязательный параметр> /page.php /page1.php 

Пример:

Перенаправит со страницы page.php на страницу page1.php

 Redirect 301 /page.php /page1.php 

Перенаправление всех запросов на http://example.com:

 Redirect / http://example.com 

Перенаправит с URL http://www.example.com на http://example.com:

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

php редирект:

Перенаправит на другой домен:

 <?php  header("HTTP/1.1 301 Moved Permanently");  header("Location: http://exemple.com");  exit(); ?> 

Перенаправит запрашиваемую страницу на news.php

 <?php  header("HTTP/1.1 302 Temporary Redirect" );  header("Location: news.php" );  exit(); ?> 

javascript редирект

* вставлять в раздел HEAD документа HTML

 <script type="text/javascript"> location.replace("http://example.com"); </script> <noscript> <meta http-equiv="refresh" content="0; url=http://exemple.com"> </noscript> 

С задержкой в миллисекундах:

 <script type="text/javascript"> setTimeout('location.replace("http://example.com")', 3000); /*Изменить текущий адрес страницы через 3 секунды*/ </script> <noscript> <meta http-equiv="refresh" content="3; url=http://exemple.com"> </noscript> 

nginx редирект

Пернаправит с http://example.com на http://site.com:

 location http://example.com { 	rewrite ^(.*)$ http://site.com redirect; } 

Будет перенаправлять все запросы с директории folder1 на директорию folder2:

 location ^~ /folder1 { 	rewrite ^(.*)$ /folder2 redirect; } 

magicpast.net

Советы

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

Старайтесь не делать редирект на страницу ответ которой отличен от кода 200. Т.е. редирект должен переадресовывать на существующую страницу с 200 ответом сервера.

Браузеры кэшируют редиректы, поэтому проверять их лучше с помощью онлайн ресурсов.

301 редирект с одной страницы на другую

Используется когда страница переехала с одного URL на другой. Например старый URL страницы /page-1/ необходимо сделать 301 редирект на URL http://mysite.com/new-page-1/

Redirect 301 /page-1/ http://mysite.com/new-page-1/  

или

RewriteCond %{REQUEST_URI} ^/page-1/$  RewriteRule ^.*$ http://mysite.com/new-page-1/? [R=301,L]  

301 редирект с www на домен без www

301 редирект домена с www на без www так же называется канонизацией домена или склейкой. Например делаем редирект с http://www.mysite.com на http://mysite.com, т.о. главное зеркало сайта это http://mysite.com

RewriteCond %{HTTP_HOST} ^www.(.*)$  RewriteRule ^(.*)$ http://%1/$1 [L,R=301]  

или

RewriteCond %{HTTP_HOST} ^www.mysite.com [NC]  RewriteRule ^(.*)$ http://mysite.com/$1 [R=301,L]  

301 редирект с домена без www на домен с www

Также как и в случае описанным выше это еще называется канонизацией домена или его склейкой. Например 301 редирект с домена http://mysite.com на домен http://www.mysite.com, т.е. главное зеркало это www.mysite.com

RewriteCond %{HTTP_HOST} ^([^www].*)$  RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]  

или

RewriteCond %{HTTP_HOST} ^mysite.com$ [NC]  RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=301,L]  

301 редирект со страниц со слешем на страницы без слеша в конце URL

Часто бывает так что одна и та же страница доступна по двум URL, например /may-best-page и /my-best-page/, если человеку понятно что это одна и та же страница, то поисковые системы понимают это как две разные страницы, соответственно разбивают вес страницы, а также показываются в аналитике (статистике) как 2 разные страницы. Для того, что бы избежать этого вы можете сделать 301 редирект со страниц со слешем в конце URL на без него.

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

Такой редирект будет работать следующим образом:

Запрос (URL) Редирект (URL)
http://mysite/page/ http://mysite/page
http://mysite/page/?value=1 http://mysite/page?value=1
http://mysite/page.html/ http://mysite/page.html
http://mysite/page?value=1/ http://mysite/page?value=1
http://mysite/page без редиректа
http://mysite/page.html без редиректа
http://mysite/page?value=1 без редиректа

301 редирект со страниц без слеша на страницы со слешем в конце URL

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

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

Пример работы редиректа:

Запрос (URL) Редирект (URL)
http://mysite/page http://mysite/page/
http://mysite/page.html http://mysite/page.html
http://mysite/page?value=1 http://mysite/page/?value=1
http://mysite/page/ без редиректа
http://mysite/page/?value=1 без редиректа

301 редирект со всех страниц одного домена на главную страницу другого домена

К примеру вам необходимо сделать 301 редирект с любого URL текущего сайт (к которому относиться .htaccess) на домен http://mysite.com

RewriteCond %{REQUEST_URI} (.*)  RewriteRule ^(.*)$ http://mysite.com/ [L,R=301]  

301 редирект с каждой страницы одного домена на такой же URL адрес другого домена

Для примера рассмотрим ситуацию когда ваш сайт переехал на новый домен, но у вас есть естественное желание сохранить пользователей переходящих по старым ссылкам и открыть сайт на новом домене с нужной пользователю информацией

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

301 редирект с протокола http на протокол https

Если у вас на сайте есть SSL сертификат и работает протокол https, то для 301-го редиректа вам необходимо добавить в .htaccess следующий код:

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

301 редирект с протокола https на http

И обратный пример, если у вас нет SSL сертификата и протокол https не работает:

RewriteCond %{HTTPS} =on  RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]  

Удаляем несколько слешей подряд в URL и делаем 301 редирект

Если по случайности у вас появились URL такого вида: mysite.com/page///my-page, то можно сделать 301-й редирект без дублирования слешей:

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

Удаляем подряд несколько тире (дефисов) и делаем 301 редирект

Как в ситуации с повторяющимися слешами в URL может появиться несколько тире или дефисов, для 301-го редиректа с их удалением добавляем код:

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

Вырезать из URL index.php

Пример без GET параметров, например с mysite.com/index.php на mysite.com/

RewriteCond %{REQUEST_URI} /index.php  RewriteCond %{QUERY_STRING} ^z  RewriteRule ^(.*)$ http://mysite.ru/? [R=301,L]  

Пример с GET параметрами, например с mysite.com/index.php?value=1&p=3 на mysite.com/?value=1&p=3

RewriteCond %{REQUEST_URI} /index.php  RewriteRule ^(.*)$ http://mysite.ru/ [R=301,L]  

Несколько примеров совмещения 2-х редиректов в один

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

301 редирект с www на без www и со слешем в конце URL

Комбинируем 301 редирект с www на домен без www и 301 редирект со страниц без слеша на страницы со слешем в конце

RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} !/$  RewriteCond %{HTTP_HOST} ^www.(.*)$  RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} ![^/]$  RewriteCond %{HTTP_HOST} ^www.(.*)$  RewriteRule ^(.*)$ http://%1/$1 [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} !/$  RewriteCond %{HTTP_HOST} ^([^www].*)$  RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]  

301 редирект с без www на с www и со слешем в конце URL

Комбинируем 301 редирект с домена без www на домен с www и 301 редирект со страниц без слеша на страницы со слешем в конце URL

RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} !/$  RewriteCond %{HTTP_HOST} ^www.(.*)$  RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} !/$  RewriteCond %{HTTP_HOST} ^([^www].*)$  RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} ![^/]$  RewriteCond %{HTTP_HOST} ^([^www].*)$  RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]  

301 редирект с без www на с www и без слеша в конце URL

Комбинируем 301 редирект с домена без www на домен с www и 301 редирект со страниц со слешем на страницы без слеша в конце URL

RewriteCond %{REQUEST_URI} ^/$  RewriteCond %{HTTP_HOST} ^([^www].*)$  RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} /$  RewriteCond %{HTTP_HOST} ^www.(.*)$  RewriteRule ^(.*)/$ http://www.%1/$1 [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} !/$  RewriteCond %{HTTP_HOST} ^([^www].*)$  RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} /$  RewriteCond %{HTTP_HOST} ^([^www].*)$  RewriteRule ^(.*)/$ http://www.%1/$1 [L,R=301]  

301 редирект с www на без www и без слеша в конце URL

Комбинируем 301 редирект с www на домен без www и 301 редирект со страниц со слешем на страницы без слеша в конце URL

RewriteCond %{REQUEST_URI} ^/$  RewriteCond %{HTTP_HOST} ^www.(.*)$  RewriteRule ^(.*)$ http://%1/$1 [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} /$   RewriteCond %{HTTP_HOST} ^www.(.*)$  RewriteRule ^(.*)/$ http://%1/$1 [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} !/$  RewriteCond %{HTTP_HOST} ^www.(.*)$  RewriteRule ^(.*)$ http://%1/$1 [L,R=301]    RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} /$  RewriteCond %{HTTP_HOST} ^([^www].*)$  RewriteRule ^(.*)/$ http://%1/$1 [L,R=301]  

кодер.укр

Requestly allows you to modify network requests. Main features include:  **Modify URL of the request** Requestly allows you to modify the url of ongoing request and you can change the url to something else. Common examples include  - Setting up Redirects (eg, facebook.com -> quora.com)  - Creating URL shortcuts (e.g. Type j-1 in address bar will open jira.corp.example.com/projects/jira-1). - Switching Hosts (All requests for xyz.com should go to abc.com) - Block websites (e.g. Block social media websites to stay productive) - Modify some part of URL (be it host, path, query parameters etc) - Stay way from time killing sites. Setup rules like when source contains facebook.com or twitter.com then redirect to StackOverflow and do some geeky stuff. - Test your JS running in production environment. Simply redirect your JS from prod to JS from your local setup box and test if your fix/code actually works in production site.    **User Scripts** - Run scripts on website and customize the web pages you want - Support your script with popular libraries like jQuery and underscore. - Use FileHosting service to upload long scripts and get a URL to be used in your websites or Requestly rules - Very similar to GreaseMonkey or TamperMonkey user scripts  **File Hosting (Library Service)** - Host JS/CSS Files and use the URLs inside Requestly rules. No need to setup local server  ** Modify Headers** - - Modify HTTP Request & Response headers (Extremely helpful for web developers for debugging applications)  ** Modify User Agent** - Setup different user agents for websites and test how they behave - Useful for web developers for testing cross-device compatibility  **Additional Features** - Deactivate the extension when you don't need it. - Enable/Disable the rules with just single click - Export and import the rules and maintain a backup for your rules (They are important, you will know) - Share Rules with other Users in one click - Browser Sync is enabled so you create/change your rules in one browser and the changes will automatically be reflected in another.   Additionally, Requestly provides a very user friendly interface to setup your rules. You can toggle a rule with a single click. No need to delete a rule when you don't need it. Just make that inactive and activate it later whenever you need it again.  Website: https://www.requestly.in Documentation: https://www.requestly.in/blog/category/docs/ Releases: https://www.requestly.in/releases/

chrome.google.com

PHP редирект внешних ссылок

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

Здесь параметр sleep() может содержать задержку для редиректа.

Данный файл заливаете с корневой каталог сайта (если это wordpress блог, то туда, где находится файл wp-config.php). После этого прописываете нужные для php редиректа ссылки как:

Сами понимаете, что в таком случае ни о каком скрытии рефереальной ссылки речь не идет. Поэтому есть смысл немного изменить код в файле go.php на следующий:

В этом случае в коде вместо текста реальная ссылка ставим реферальную. Но тогда в одном PHP файле мы сможем задавать редирект только для одной реф. ссылки, поэтому придется создавать сразу несколько файлов под каждую биржу отдельно по типу gosape.php, goggl.php и т.п. При этом было бы неплохо закрыть индексацию файлов с PHP редиректом в robots.txt go.php:

Либо проще будет закрыть индексацию целой директории, куда и добавить все php файлы.

Редирект ссылок через htaccess

Редирект для ссылок можно организовать не только через PHP файл, но и прописать соответствующую директиву Redirect в файле .htaccess. Его вы можете найти в корневой директории сайта. Кроме того на хостинге должен быть включен модуль mod_rewrite (в большинстве случае имеется). Синтаксис для команды следующий:

Redirect [status] URL-path URL

Здесь:

  • status : необязательное поле, определяет код возврата, допустимые значения:
    • permanent (301 — документ перемещен постоянно)
    • temp (302 — документ перемещен временно)
    • seeother (303 — смотрите другой)
    • gone (410 — убран)
  • URL-path : подставная ссылка.
  • URL : реальная ссылка

Таким образом для создания партнерской ссылки добавляем в .htaccess конструкцию по типу:

Таким образом клике по ссылке http://mysite.ru/gosape пользователь будет попадать на сайт sape с реферальной ссылкой. За метод спасибо автору этой статьи.

tods-blog.com.ua


You May Also Like

About the Author: admind

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector