Особенности реализации редиректа на php

Содержание:

Введение

Переадресация – когда веб-страница побывала на определенном URL, а потом меняет его на другой URL. Если пользователь посетил «website.com/page-a» и произошло перенаправление на «website.com/page-b». Переадресация пригодится Вам, если Вы хотите перенаправить страницу на новое место, изменить URL-структуру сайта, удалить «WWW» из URL или даже полностью перенаправить страницу на другой сайт.

К примеру, Вы только что перешли на новый сайт и хотите закрыть старый. Но Вам не нужно, чтобы страницы старого сайта имели статус 404 Not Found. Старые ссылки должны перенаправлять пользователя на Ваш новый сайт.

Пример: мы хотим old-website.com/blog/post перенаправить на new-website.com/blog/post, а также мы хотим перенаправить все другие страницы, использующие данный URL. Также необходимо, чтобы поисковые системы понимали, что эти изменения постоянны и обновлялись соответственно. Как же это сделать? Для начала нужно узнать немного про HTTP.

Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1/

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://%1/$1/

PHP редирект ссылок в два этапа

1.linkslist.php – хранит массив внешних (реферальных) ссылок для редиректа, его код:

<?php
      $linksList = array(
          'page1.html' => 'http://www.google.com',
          'page2.html' => 'http://www.php.net'
      );
      ?>

2. redirect.php – php скрипт анализа ссылки и выполнения перерхода:

<?php
      require_once('linkslist.php');
 
      $request = $_SERVER'REQUEST_URI';
      $dest = explode('/', $request);
      $newUrlKey = end($dest);
 
      if (array_key_exists($newUrlKey, $linksList)) {
          header('Location:'.$linksList$newUrlKey);
      }
      else {
          header('Location:http://www.simplecoding.org');
      }
      ?>

3. Файл .htaccess – передает запросы скрипту redirect.php.

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^get/(.+) /pages/redirect.php/$1 
</IfModule>

После этого на страницах вашего блога или сайта вы можете размещать ссылки вида http://site_name/pages/get/page1.html, где page1.html — определяется в файле linkslist.php и соответствует реальной ссылке, на которую будете перенаправлен пользователь. Весь процесс обработки ссылки автор метода уместил в такой схеме:

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

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

А каким способом скрытия реферальных ссылок пользуетесь вы и почему?

P.S. Постовой. Компания WebPromo предоставляет поисковое продвижение сайта и его раскрутку в Google и Яндекс.
Если вы не знаете как предотвратить лишение водительских прав советуем обратиться за бесплатной консультация автоюриста.
Линзмастер — это интернет магазин контактных линз с доставкой по Киеву и Украине.

301 редиректы на Opencart при помощи плагина

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

Менеджер 301 редиректов для Opencart

Данный модуль платный, однако является быстрым, удобным и практичным решением задачи.

Для того чтобы выполнить 301 редиректы с его помощью, нужно:

Шаг 2. Дать права на просмотр и управление модулем в разделе «Группы пользователей», нажав «Выделить все».

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

Шаг 4. Выбрать необходимый редирект в поле «код ответа», и указать даты, с какого по какое число должен действовать редирект. Поля также можно не заполнять, тогда редирект будет вечным.

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

Шаг 5. Проверить реализацию редиректа. Сделать это можно способами, описанными ранее в данной статье.

Когда не следует делать 301 редирект?

Перманентный редирект не стоит использовать для временных решений, это очевидно из его названия – для временного перемещения используйте 302 Moved Temporarily. При этом не произойдет склейки страниц и страницу с редиректом можно будет в любое время восстановить.

Если с вашим доменом случились проблемы, например, фильтры, бан и т.п., и вы решили сменить адрес сайта (домен), то не стоит делать 301 редирект со старого домена на новый — в результате вы «приклеите» к новому домену все проблемы старого. То есть в итоге ничего и не изменится.

Существует очень много способов сделать 301-редирект: через htaccess, php, javascript, настройки сервера и другие. Мы рекомендуем не пытаться использовать сразу все методы одновременно, слишком велика вероятность «разногласий» между разными способами и можно, например, получить бесконечное циклическое перенаправление.

Важно! Нужно выгружать несуществующие страницы из SC и прописывать редиректы на существующие. Исключение: товар (в случае, если он может снова появиться в наличии).

ЕЩЁ

Полноэкранное видеоМодальное окноШкала времениИндикатор прокрутки Индикатор выполненияПанель навыковПолзунок диапазонаПодсказки при наведенииВсплывающие окнаСкладная секцияКалендарьВключить HTMLСписок делЗагрузчикиЗвездный рейтингПользовательский рейтингНаложениеКонтактные чипыКарточкиФлип-картаКарточка профиляКарточка товараОкно тревогиВыноска сообщенияПримечаниеМеткиКругиHR Горизонтальная линияКупонГруппа списковОтзывчивый текстВырезанный текстСветящийся текстФиксированный подвалЛипкий элементРавная высота столбцовОчистка поплавкаОтзывчивые поплавкиСнэк-бар/тостПолноэкранное режимЧертеж при прокруткеПлавная прокруткаГрадиент фонаЛипкий заголовокИзменить заголовок при прокруткеОтзывчивые столбцы ценПараллаксСоотношение сторонПереключатель нравится/не нравитсяПереключатель скрыть/показатьПереключаель текстаПереключатель классаДобавить классУдалить классАктивный классДревовидное представлениеУдалить свойствоАвтономный режим обнаруженияСделать скрытый элементПеренаправление веб страницыУвеличить при наведенииФлип-боксЭлемент вертикально по центруПереход при наведении курсораСтрелкиФигурыСсылка для скачиванияПолная высота элементаОкно браузераПользовательская полоса прокруткиРазличные устройстваЦвет заполнителяЦвет выделения текстаЦвет макераВертикальная линияАнимированные иконкиТаймер обратного отсчетаПишущая машинкаСтраница заставкиСообщение чатаВсплывающее окно чатаРазделенный экранРекомендацииСчетчик разделаСлайд-шоу цитатЗакрываемые злементы спискаТипичные точки прерыванияПеретаскиваемый HTML элементМедиа запросы JSПодсветка синтаксисаJS анимацииПолучить элементы Iframe

МЕНЮ

Панель иконокЗначок менюАккордеонВкладкиВертикальные вкладкиЗаголовки вкладокВкладки полностраничныеВкладки при наведенииВерхняя навигацияОтзывчивый верхний навигаторНавигация с иконкамиМеню поискаСтрока поискаФиксированная боковая панельАнимированные боковые панелиОтзывчивая боковая панельПолноэкранная навигация наложенияМеню Off-CanvasБоковые кнопки навигацииБоковая панель с иконкамиМеню с горизонтальной прокруткойВертикальное менюНижняя навигацияОтзывчивая нижняя навигацияГраницы навигацииМеню по правому краюСсылка меню по центруМеню равной шириныФиксированное менюСкольжение вниз по полосе прокруткиСкрыть меню при прокруткеУменьшить меню при прокруткеЛипкая навигацияНавигация на изображенияВыпадающее менюВыпадающий при кликеВыпадающее меню в навигацииВыпадающий список в боковой навигацииОтзывчивая навигация с выпадающимПодменю навигацияВсплывающее менюМега менюМобильное менюМеню занавесСвернуть боковой барСвернуть боковую панельПагинацияХлебные крошкиГруппа кнопокГруппа вертикальных кнопокЛипкий социальный барНавигация таблеткиОтзывчивый заголовок

Другие способы создания переадресации 301

Через PHP

Данный вариант подойдет тем, кто хорошо разбирается в web-программировании и PHP. Необходимо открыть файл index.php в корне CMS-движка и прописать там:

if($_SERVER == "/index.php") {

 header("Location: /",TRUE,301);

 exit();

}

(в первой строке укажите старый url, а во второй — новый)

Второй способ — перенаправление при помощи отправки заголовков (скрипта):

<?php

  header("HTTP/1.1 301 Moved Permanently");

  header("Location: http://www.newdomain.ru/newdir/newpage.htm");

  exit();

?>

ASP-редирект

<%@ Language=VBScript %>

<%

Response.Status="301 Moved Permanently"

Response.AddHeader "Location", "http://www.new-url.com"

response.end

%>

ASP.NET редирект

Найдите в корне своего сайта файл web.config и вставьте в секцию синтаксис:

<script runat="server">

  private void Page_Load(object sender, System.EventArgs e)

  {

    Response.Status = "301 Moved Permanently";

    Response.AddHeader("Location","http://www.new-url.com");

  }

</script>

ColdFusion редирект

<.cfheader statuscode="301″ statustext="Moved permanently">

<.cfheader name="Location" value="http://www.new-url.com">

JSP (Java) редирект

Данный способ подойдет для небольшой корректировки простых сайтов. Код можно прописать лишь в одном файле, а сам файл добавить на все нужные страницы, указав:

<script type="text/javascript" src="redirect.js"></script>

<script type="text/javascript">

  location="https://yandex.ru";

</script>

HTML-редирект

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

<meta http-equiv="refresh" content="5;https://livepage.pro">

Если поставить значение 0 вместо 5, то переадресация на https://livepage.pro произойдет моментально.

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

Редирект в PHP

В php есть функция , которая разрешает не только подменять стандартные заголовки, но и добавлять новые.

Синтаксис:

// string - полностью сформированная строка заголовка, который необходимо добавить (без завершающего перевода строки "\n")
// replace указывает, нужно ли заменять заголовки с одинаковыми именами (true), или же добавлять в конец (false)
// http_response_code указывает код http-ответа (300, 301, 302 и т.д.)

void header ( string string ] );

Примеры использования:

header( 'Refresh: 0; url=/error404.html' ); // переадресовать на страницу ошибки немедленно (без задержки)
header( 'Refresh: 5; url=https://www.google.com/' ); // переадресовать на главную страницу Рамблера через 5 секунд после загрузки страницы.
header( 'Location: /', true, 307 ); // перебросить на главную страницу сайта с использованием 307 редиректа.
header( 'Location: /article/page.htm', true, 303 ); // с помощью 303 редиректа переадресовать на внутреннюю страницу сайта.

header( 'Location: http://google.ru/search?q=redirect' ); // с помощью 302 редиректа переадресовывать на поиск в гугле слова redirect (При использовании Location без указания кода редиректа, по умолчанию используется 302-й).

header( 'Location: http://yandex.ru/yandsearch?text=redirect', true, 301 ); // сделать переадресацию с помощью 301 редиректа на поиск в Яндексе слова redirect.

Редирект HTML в PHP:

<?php
echo '<meta http-equiv="refresh" content="5;URL=https://ida-freewares.ru">';

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

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://site.com/');

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

Полезные советы

  • Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
  • Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы — вес исходной страницы может не передаться.
  • При составлении файла .htaccess простые директивы должны идти раньше сложных, которые распространяются на весь сайт. Такая компоновка будет более удобной при работе с файлом и поможет избежать путаницы.

Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://www.%1/$1/

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://www.%1/$1/

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ http://www.%1/$1

PHP Redirect with HTTP Status Code

Create a sample function called movePage() in sitefunctions.php (note I’m not the author of the following I found it somewhere else on the Internet):

function movePage($num,$url){
   static $http = array (
       100 => "HTTP/1.1 100 Continue",
       101 => "HTTP/1.1 101 Switching Protocols",
       200 => "HTTP/1.1 200 OK",
       201 => "HTTP/1.1 201 Created",
       202 => "HTTP/1.1 202 Accepted",
       203 => "HTTP/1.1 203 Non-Authoritative Information",
       204 => "HTTP/1.1 204 No Content",
       205 => "HTTP/1.1 205 Reset Content",
       206 => "HTTP/1.1 206 Partial Content",
       300 => "HTTP/1.1 300 Multiple Choices",
       301 => "HTTP/1.1 301 Moved Permanently",
       302 => "HTTP/1.1 302 Found",
       303 => "HTTP/1.1 303 See Other",
       304 => "HTTP/1.1 304 Not Modified",
       305 => "HTTP/1.1 305 Use Proxy",
       307 => "HTTP/1.1 307 Temporary Redirect",
       400 => "HTTP/1.1 400 Bad Request",
       401 => "HTTP/1.1 401 Unauthorized",
       402 => "HTTP/1.1 402 Payment Required",
       403 => "HTTP/1.1 403 Forbidden",
       404 => "HTTP/1.1 404 Not Found",
       405 => "HTTP/1.1 405 Method Not Allowed",
       406 => "HTTP/1.1 406 Not Acceptable",
       407 => "HTTP/1.1 407 Proxy Authentication Required",
       408 => "HTTP/1.1 408 Request Time-out",
       409 => "HTTP/1.1 409 Conflict",
       410 => "HTTP/1.1 410 Gone",
       411 => "HTTP/1.1 411 Length Required",
       412 => "HTTP/1.1 412 Precondition Failed",
       413 => "HTTP/1.1 413 Request Entity Too Large",
       414 => "HTTP/1.1 414 Request-URI Too Large",
       415 => "HTTP/1.1 415 Unsupported Media Type",
       416 => "HTTP/1.1 416 Requested range not satisfiable",
       417 => "HTTP/1.1 417 Expectation Failed",
       500 => "HTTP/1.1 500 Internal Server Error",
       501 => "HTTP/1.1 501 Not Implemented",
       502 => "HTTP/1.1 502 Bad Gateway",
       503 => "HTTP/1.1 503 Service Unavailable",
       504 => "HTTP/1.1 504 Gateway Time-out"
   );
   header($http$num);
   header ("Location: $url");
}
}

First include sitefunctions.php and than call movePage() as follows:

<?php
@include("/path/to/sitefunctions.php");
 
/* Move page with 301 http status code*/
movePage(301,"http://www.cyberciti.biz/");
?>

Корректный редирект с одного url на другой

Допустим вы корректно настроили стандартные редиректы в nginx. А потом в какой-то момент у вас поменялась структура сайта, или просто нужно было сделать редиректы для отдельных страниц. К примеру, запрос https://site.ru/main/hello/ перенаправить в https://site.ru/main/. По идее ничего сложного. Добавляем редирект:

server {
 listen 443;
........................
 location /main/hello {
  return 301 /main/;
 }
........................

Если делать запросы по https, то все в порядке. Никаких проблем, сработает ровно один 301-й редирект на другой url. А что будет при запросе http://site.ru/main/hello ? Смотрим.

# curl -I -L --insecure http://site.ru/main/hello

HTTP/1.1 301 Moved Permanently
Server: nginx
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Location: https://site.ru/main/hello/

HTTP/2 301 
server: nginx
content-type: text/html
content-length: 162
location: https://site.ru/main/

HTTP/2 200 
server: nginx
content-type: text/html; charset=utf-8
vary: Accept-Encoding

Опять два 301-х редиректа. Переделываем на один, не забывая все возможные варианты написания.

server {
    listen 443 ssl http2;
    server_name www.site.ru;

    location ~* ^.+.(js|css|png|jpg|jpeg|gif|webp|ico|woff|txt)$ {
	return 301 https://site.ru$request_uri;
    }
    
    location / {
	rewrite ^/(.*)/$ /$1;
	return 301 https://site.ru$uri/;
    }

    location /main/hello {
	rewrite ^/(.*)/$ /$1;
	return 301 https://site.ru/main/;
    }

}

server {
    listen 80;
    server_name site.ru www.site.ru;

    location ~* ^.+.(js|css|png|jpg|jpeg|gif|webp|ico|woff|txt)$ {
	return 301 https://site.ru$request_uri;
    }
    
    location / {
	rewrite ^/(.*)/$ /$1;
	return 301 https://site.ru$uri/;
    }

    location /main/hello {
	rewrite ^/(.*)/$ /$1;
	return 301 https://site.ru/main/;
    }
}

Ну и так далее. Думаю, идея ясна. Следует следить за всеми редиректами и стараться всегда оставлять только один.

Зачем редирект арбитражнику?

Наконец, подходим к главному вопросу: почему все арбитражники (здесь небольшой ликбез по арбитражу трафика, если кто забыл или еще не знает, чем мы тут занимаемся)) и многие вебмастера так озабочены перенаправлением трафика?

Если вы уже имели дело с CPA-сетями или даже попробовали делать спам-рассылку во ВКонтакте, то знаете не понаслышке – полить трафик на партнерку без редиректа ссылок просто не получится. И тому есть 2 причины:

ВК заботится о нашей безопасности)

2. Если в спам-рассылке использовать одну и ту же ссылку, то она станет критерием для отправки страниц аккаунтов-распространителей в бан. Дальнейшее использование ссылки становится небезопасным – аккаунты, рассылающие её будут морозить, и морозить надолго.

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

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

ИЗОБРАЖЕНИЯ

Слайд шоуГалерея слайд шоуМодальное изображениеЛайтбоксОтзывчивая сетка изображенийСетка изображенийГалерея вкладокЭффект наведения на изображениеНаложение слайда на изображениеНаложение на изображениеНаложение заголовка на изображениеНаложение иконки на изображениеЭффект к изображениюЧерно-белое изображениеТекст на изображенииИзображение с текстовым блокомИзображение c прозрачным текстомИзображение на всю страницуФорма на изображенииИзображение герояРазмытое фоновое изображениеФоновое изображениеВыравненные изображенияОкругленные изображенияИзображение аватарОтзывчивое изображениеИзображение по центруМинитюрное изображениеЗнакомство с командойЛипкое изображениеЗеркальное изображениеДрожание изображенияГалерея портфолиоПортфолио фильтрЗум изображенияЛупа изображенияПолзунок сравнения

Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы

RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$ 
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ http://%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)\/$ http://%1/$1

Как сделать редирект URL-адресов с помощью mod_alias Apache

Самый простой способ перенаправления на серверах Apache:

Redirect 301 /old-location.html http://example.com/new-location/

Перед тем, как сделать редирект HTML, этот код нужно добавить в файл .htaccess или файл конфигурации сервера Apache. Вот синтаксис этого метода:

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

http://example.com/old-directory/file-01.html
http://example.com/old-directory/file-02.html
http://example.com/old-directory/file-03.html
.
.
.

Можно использовать RedirectMatch вместо Redirect:

RedirectMatch 301 /old-directory/file-(.*).html http://example.com/new-directory/file-$1.html

Также можно изменить код статуса с 301 (постоянный редирект) на 302 (временный редирект). Или на любой другой действительный код состояния. Ниже приведено руководство по регулярным выражениям, используемым в методе RedirectMatch:

  • (.*) — соответствует любому символу (или отсутствию символа);
  • . — буквально соответствует точке;
  • $1 — возвращает шаблон, сопоставляемый первым (.*).

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

Для серверов, которые работают под управлением веб-сервера Lighttpd, можно сделать перенаправление, импортируя mod_redirect модуль и используя url.redirect:

server.modules = (

“mod_redirect”

)

$HTTP=~”^(www\.)?old-website.com$”{

    url.redirect = (

    “^/(.*)$” => “http://www.new-website.com/$1”,

    )

}

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

В PHP можно использовать функцию header:

header(‘Location: http://new-website.com’);

    exit;

?>

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

header(‘Location: http://www.new-website.com/’, true, 301);

    exit();

?>

Параметр true заменит ранее установленный header и 301 изменяет код ответа на правильный.

Переадресация с http на https

При переезде сайта с http на https (установка SSL-сертификата) потребуется код, который не требует дополнительных модификаций:

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP:X-HTTPS} !1

RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1

Второй метод осуществляет перенос с http://domain.ru на https://domain.ru:

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP:X-HTTPS} !1

RewriteCond %{HTTP_HOST} ^domain\.ru$

RewriteRule ^(.*)$ https://domain.ru/$1

Третий способ выполняет аналогичную функцию, но отключает перенаправление для robots.txt:

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP:X-HTTPS} !1

RewriteCond %{REQUEST_URI} !robots.txt

RewriteRule ^(.*)$ https://domain.ru/$1

В 4-й версии конечным пунктом для пользователя станет https://www.domain.ru:

RewriteEngine On

RewriteBase /

RewriteCond %{HTTP:X-HTTPS} !1

RewriteCond %{HTTP_HOST} ^domain\.ru$

RewriteRule ^(.*)$ https://www.domain.ru/$1

Позволяет сделать форвардинг с http://www.poddomen.domain.ru на https://poddomen.domain.ru:

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.poddomen\.domain\.ru$

RewriteRule ^(.*)$ https://poddomen.domain.ru/$1

RewriteBase /

RewriteCond %{HTTP:X-HTTPS} !1

RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1

Последняя версия, дающая возможность сделать связь между http://poddomen.domain.ru на https://www.poddomen.domain.ru:

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{HTTP_HOST} ^poddomen\.domain\.ru$

RewriteRule ^(.*)$ https://www.poddomain.domain.ru/$1

RewriteBase /

RewriteCond %{HTTP:X-HTTPS} !1

RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1

Использование функции PHP header() для редиректа URL-адреса

Если хотите добавить редирект с initial.php
на final.php
, можно поместить на веб-странице initial.php
следующий код. Он отправляет в браузер новый заголовок location
:

<?php $new_url = «https://example.com/final.php»;
header(«Location: «.$new_url);
?>

Здесь мы используем PHP-функцию header()
, чтобы создать редирект. Нужно поместить этот код перед любым HTML
или текстом. Иначе вы получите сообщение об ошибке, связанной с тем, что заголовок уже отправлен. Также можно использовать буферизацию вывода, чтобы не допустить этой ошибки отправки заголовков. В следующем примере данный способ перенаправления PHP
показан в действии:

<?php ob_start();
$new_url = «https://example.com/final.php»;
header(«Location: «.$new_url);
ob_end_flush();
?>

Чтобы выполнить переадресацию с помощью функции header()
, функция ob_start()
должна быть первой в PHP-скрипте
. Благодаря этому не будут возникать ошибки заголовков.

В качестве дополнительной меры можно добавить die()
или exit()
сразу после редиректа заголовка, чтобы остальной код веб-страницы не выполнялся. В отдельных случаях поисковые роботы или браузеры могут не обращать внимания на указание в заголовке Location
. Что таит в себе потенциальные угрозы для безопасности сайта:

<?php $new_url = «https://example.com/final.php»;
header(«Location: «.$new_url);
exit();
?>

Чтобы прояснить ситуацию: die()
или exit()
не имеют отношения к редиректам. Они используются для предотвращения выполнения остальной части кода на веб-странице.

При PHP
перенаправлении на страницу рекомендуется использовать абсолютные URL-адреса
при указании значения заголовка Location
. Но относительные URL-адреса
тоже будут работать. Также можно использовать эту функцию для перенаправления пользователей на внешние сайты или веб-страницы.

Вывод кода JavaScript-редиректа с помощью функции PHP echo()

Это не является чистым PHP-решением
. Тем не менее, оно также эффективно. Вы можете использовать функцию PHP echo()
для вывода кода JavaScript
, который будет обрабатывать редирект.

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

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

<?php echo «»;
echo «»;
echo «»;
?>

Единственным недостатком этого метода перенаправления на другой сайт PHP
является то, что JavaScript
работает на стороне клиента. А у ваших посетителей может быть отключен JavaScript
.

Использование метатегов HTML для редиректа

Также можно использовать базовый HTML
для выполнения редиректа. Это может показаться непрофессиональным, но это работает. И не нужно беспокоиться о том, что в браузере отключен JavaScript
или ранее была отправлена ошибка заголовков:

Также можно использовать последнюю строку из предыдущего примера, чтобы автоматически обновлять страницу каждые «n

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

Заключение

В этой статье я рассмотрел три различных метода перенаправления с index php
, а также их преимущества и недостатки. Конкретный метод, который стоит использовать, зависит от задач проекта.

Перевод статьи «How can I do a redirect to different url before page load in PHP
» дружной командой проекта .

Хорошо
Плохо

ФОРМЫ

Форма входаФорма регистрацииФорма оформления заказаКонтактная формаФорма входа в соц сетиРегистрацияФорма с иконкамиРассылка по почтеСложенная формаАдаптивная формаФорма всплывающаяФорма линейнаяОчистить поле вводаКопирование текста в буфер обменаАнимированный поискКнопка поискаПолноэкранный поискПоле ввода в менюФорма входа в менюПользовательский флажок/радиоПользовательский выборТумблер перключательУстановить флажокОпределить Caps LockКнопка запуска на EnterПроверка пароляПереключение видимости пароляМногоступенчатая формаФункция автозаполнения

Вывод кода JavaScript-редиректа с помощью функции PHP echo()

Это не является чистым PHP-решением. Тем не менее, оно также эффективно. Вы можете использовать функцию PHP echo() для вывода кода JavaScript, который будет обрабатывать редирект.

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

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

<?php
echo "<script>self.location='https://example.com/final.php';</script>";
echo "<script>document.location.href='https://example.com/final.php';</script>";
echo "<script>window.location.href='https://example.com/final.php';</script>";
echo "<script>window.location.replace('https://example.com/final.php');</script>";
?>

Единственным недостатком этого метода перенаправления на другой сайт PHP является то, что JavaScript работает на стороне клиента. А у ваших посетителей может быть отключен JavaScript.

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

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

Adblock
detector