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

Содержание:

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

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

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

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

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

Типы и настройка редиректов

Типы редиректов принято разделять по тому, как они реализованы. Самый популярный у SEO-специалистов метод — серверный редирект, который настраивается в файле .htaccess (конфигурационный файл наиболее распространённого сервера Apache). Кроме того, для реализации перенаправлений можно использовать файл nginx.config, а также PHP, HTML, JavaScript.

Редиректы могут иметь разный HTTP-статус. По коду состояния HTTP поисковые системы и браузеры определяют, к какому виду относится редирект. Всего есть 9 видов таких редиректов, но на практике используются три статус-кода.

2.1. 301 Moved Permanently

301 редирект — это постоянный редирект, который демонстрирует, что документ перенесён на новый URL-адрес. 301 редирект лучший вариант для оптимизации сайта под поисковые системы. Он позволяет заменить адрес документа в выдаче со старого на новый без потери позиций и трафика.

Я собрал общие случаи использования 301 редиректа.

2.1.1. Редиректы www

Вот как настроить редирект из домена с www на домен без www:

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

А вот так можно настроить редирект URL без www в URL с www:

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

2.1.2. Изменение расширения файла

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

RedirectMatch 301 (.*)\.php$ http://www.bacon.com$1.html

2.1.3. Редирект с разных доменов и поддоменов

Если вы купили несколько доменов в разных доменных зонах или перепроектировали новый сайт в поддомене, вы должны установить редирект со всех дополнительных доменов или поддоменов на основной домен:

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

2.1.4. Слеши в конце URL-адреса

Вы должны помнить, что поисковые системы рассматривают URL-адреса с и без слеша (https://www.bacon.com/sandwich/ и https://www.bacon.com/sandwich) как два разных URL-адреса. Определите, какой из них более подходит для вашего сайта, и настройте следующие переадресации.

Чтобы удалить слеш в конце URL-адреса:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1

Чтобы добавить слеш в конце URL-адреса:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /$1/

2.1.5. Переключение с HTTP на HTTPS

Вам необходимо установить команду для 301 редиректа на HTTPS-версию сайта. Если у вас есть WordPress CMS с управлением хостингом cPanel, вы можете прочитать подробное руководство по переходу на HTTPS.

2.1.6. Управление битыми ссылками

Если вы навсегда удалили одну из своих страниц и создали новую, установите 301 редирект на главную или новую страницу и удалите все ссылки на эту страницу на своём сайте.

RewriteRule ^old/URL/path$ http://site.com/new/path

Подробнее читайте в посте о том, как найти битые ссылки.

2.2. 302 Found, 302 Moved Temporarily

302 редирект демонстрирует, что запрошенный ресурс временно перемещён. Данный вид редиректа может быть использован для страниц с краткосрочными акциями и распродажами конкретного товара. Не рекомендую использовать его для адресов, изменённых навсегда. Роботы поисковых систем индексируют только ту страницу, на которую установлен редирект, но в выдаче останется старый URL. Однако, если робот поисковой системы решит, что вы по ошибке настроили 302 редирект вместо 301, он заменит адрес в выдаче, как и в случае с 301 редиректом. И вернуть его обратно будет проблематично.

Вы можете прописать такую директиву в файле .htaccess, чтобы установить редирект:

Redirect 302 /old.html http://localhost/new.html

2.3. 307 Moved Temporarily

Временный редирект, который указывает, что документ временно доступен по другому URL. Отличие от 302: сохранение метода передачи запроса (GET, POST), который указывает поисковикам, что кешировать документ не стоит (если нет дополнительных указаний).

Вы можете установить 307 Moved Temporarily, когда контент перемещается только временно (например, при перепроектировании). Это позволяет поисковикам понять, что ваш сервер совместим с HTTP 1.1.

Кроме того, клиенты не должны автоматически переадресовывать запросы POST / PUT / DELETE. Кэширование должно выполняться только в том случае, если в ответе сервера есть заголовки Cache-Control или Expires.

Настройки веб-серверов в Панели управления

В настройках базового веб-сервера вы можете изменять все директивы PHP, значение графы Changeable для которых соответствует PHP_INI_PERDIR или PHP_INI_ALL. Эти настройки будут иметь силу на всех сайтах, которые работают на этом веб-сервере.

Управлять абсолютно всеми параметрами PHP вы можете на расширенном веб-сервере, редактируя php.ini через его настройки.

Чтобы установить индивидуальные параметры PHP для отдельного сайта, используйте файл .htaccess. Через него можно управлять всеми параметрами, доступными для изменения на базовом веб-сервере – примеры самых востребованных перечислены ниже.

По умолчанию отображение ошибок PHP на хостинге отключено. Для того чтобы видеть текст ошибок PHP на странице сайта, добавьте в файл .htaccess директиву:

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

Директория в пути расположения файла должна существовать, а если ее нет — обязательно создайте папку вручную. Файл журнала будет создан при появлении первой ошибки.

Для изменения ограничения на оперативную память для выполнения процесса используйте следующую директиву в .htaccess:

Вместо 512M укажите желаемый размер ограничения

Обратите внимание, что символ «M» (латинская M) указывается слитно со значением. Уточнить максимальное значение оперативной памяти, доступное по тарифу, можно в

Чтобы увеличить время выполнения скриптов (в секундах), добавьте следующую директиву в .htaccess:

Вместо 300 укажите желаемый размер ограничения

Обратите внимание, что выполнение скрипта более чем в 10 минут (600 секунд) завершится ошибкой с кодом 504

Если вам нужно загружать файлы бóльшего размера, либо же ограничить их объем (чтобы контролировать дисковую квоту), то управлять объемом загружаемого файла можно через .htaccess:

Вместо 200M укажите желаемый размер ограничения

Обратите внимание, что символ «M» (заглавная латинская M) указывается слитно со значением

Максимальный размер передаваемых переменных определяется с помощью следующей директивы:

Вместо 15000 укажите необходимый размер ограничения, который требует CMS сайта.

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

Вместо «windows-1251» подставьте подходящую кодировку, например, UTF-8. Проверить, в какой именно кодировке написан сайт, можно через инструменты используемого браузера. Если сайт не обрел корректный вид, обратитесь за помощью в службу технической поддержки.

Чтобы заставить интерпретатор PHP обрабатывать файлы с произвольным расширением, (например, .phtml), добавьте в файл .htaccess следующую строку:

Изменение времени хранения сессий может потребоваться, если вы хотите, чтобы данные об авторизации пользователей на вашем сайте сохранялись дольше.

По умолчанию время хранения сессий — 1440 секунд (24 минуты). Для изменения этого значения добавьте в .htaccess следующие директивы:

Обратите внимание: при большом количестве посетителей и длительном времени сохранения сессий в папке, указанной в session.save_path, образуется большое количество файлов. Это может вызывать замедление сайта в момент очистки старых сессий и увеличивать количество потребляемых ресурсов

Альтернативные механизмы хранения и очистки сессий:

  1. Указывать вложенность директорий хранения сессий с помощью аргумента N в session.save_path и очищать старые сессии собственными скриптами ( в документации PHP).
  2. Реализовать собственный механизм хранения сессий (например, в MySQL) и установить его с помощью функции session_set_save_handler.

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

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

Redirect URL-path URL

Здесь:

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

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

RewriteEngine on
Redirect /gosape http://www.sape.ru/12345.php

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

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

<meta http-equiv="content-type" content="text/html; charset=utf-8">
 Перенаправление
<?php
$url = isset($_REQUEST'url') ? $_REQUEST'url'  '';
if(preg_match('#(http?|ftp)://\S+;\'\"!?]#i',$url)){
    sleep();
    //header("Location: $url");
    echo "<html><head><meta http-equiv=\"refresh\" content=\"0;url=$url\"></head></html>";
    exit();
}
?>

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

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

http://ваш_сайт/go.php?url=http://куда_направляемся

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

<?php
header ("Location: http://реальная ссылка");
exit();
?>

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

User-agent *
Disallow /go.php
Disallow /gosape.php
Disallow /goggl.php

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

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 и Яндекс.
Если вы не знаете как предотвратить лишение водительских прав советуем обратиться за бесплатной консультация автоюриста.
Линзмастер — это интернет магазин контактных линз с доставкой по Киеву и Украине.

How Redirection Works in PHP

In PHP, when you want to redirect a user from one page to another page, you need to use the function. The header function allows you to send a raw HTTP location header, which performs the actual redirection as we discussed in the previous section.

How to Use Header Function

Let’s go through the syntax of the function.

  • : This is the HTTP header string that you want to use. In our case, we’ll use the header for redirection.
  • : It’s an optional parameter which indicates whether the header should replace a previous similar header.
  • : It allows you to send a specific response code.

Now, let’s have a look at the following example to understand how it all works together.

When the above script is executed, it’ll redirect the client browser to http://www.yoursite.com/new_index.php. In the background, it sends a raw HTTP header along with the 302 status code. The 302 status code is used for temporary redirection, but if you want permanent redirection, you can pass the 301 code in the third argument, as shown in the following snippet.

The 301 permanent redirect allows you to inform the search bots that the page is no longer available, and it can be replaced with a new page.

Why Should You Use the or Function After the Header Redirection?

Users with sharp eyes would have noticed that I’ve used the function in the above example. In fact, it’s mandatory that you use either the or the function immediately after the header redirection to stop script execution and avoid any undesired results.

So it’s always recommended practice to use one of these functions after redirection.

The Famous Error: Headers Are Already Sent

If you’re an experienced PHP programmer, I’m sure you’ve come across this famous PHP error at some point in your day-to-day PHP development. For beginners, however, encountering this error is really annoying, since it’s really hard to debug and fix. In most cases, they don’t even have a clue that it’s caused by the header redirection.

The rule of thumb is that when you use the function in your script, you need to make sure that you don’t send any output before it. Otherwise, PHP will complain with the «headers are already sent» error. This can happen even if you’ve sent a single white space before using the header function.

Как настроить 301 редирект

Джон Мюллер предупреждает, что Google может не проиндексировать конечную страницу, если не соблюсти все правила. Нужно использовать канонический тег, внутренние ссылки и при необходимости тег hreflang для конечной страницы, а не той, с которой вы перенаправляете пользователя. Иначе Google получит неправильные сигналы и может не проиндексировать конечную страницу.

Настроить переадресацию можно через панель управления вашим хостингом или вручную средствами HTML, PHP, JavaScript.

В настройках конкретного хостинга обычно подробно описано, как сделать редирект через панель управления. Для разных CMS есть специальные плагины для редиректов. Разберем способы для настройки вручную на примере редиректа на сайт с www или без него.

Редирект для Nginx

Для серверов под Nginx нужно использовать файл nginx.config, добавьте код в секцию server. Если вы настроили виртуальные хосты, для каждого хоста нужно редактировать файлы отдельно.

С домена с www на домен без www

server {#...
    if($host~ * www\.(.*)) {
        set $host_without_www $1;
        rewrite ^ (.*) $ http: //$host_without_www$1 permanent;
    }#...
}

С домена без www на домен с www

server {#...
    if($host~ * ^  + \. + $) {
        rewrite ^ (.*) $ $scheme: //www.$host$1 permanent;
    }#...
}

После изменения nginx.config перезапустите nginx с помощью команды «service nginx restart». Проверить, все ли корректно заполнено, можно через команду «nginx -t».

Редирект для Apache

Если вы используете Apache, вам нужен файл .htaccess. Для доступа есть несколько вариантов:

  • Используйте FTP и включите отображение скрытых файлов. Найдите .htaccess в каталоге public_html в папке с названием домена.
  • Откройте панель управления хостингом, включите отображение скрытых файлов и найдите его через Диспетчер файлов.

Скачайте .htaccess, добавьте код редиректа и загрузите файл заново. Если файла .htaccess нет, его нужно создать.

На домен без www

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site\.ru$ 
RewriteRule ^(.*)$ <a href="https://site.ru/https://site.ru/$1" class="redactor-autoparser-object">https://site.ru/https://site.ru/$1</a> 

На домен с www

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.ru
RewriteRule (.*) <a href="http://www.site.ru/http://www.site.ru/$1" class="redactor-autoparser-object">http://www.site.ru/http://www.site.ru/$1</a> 

Редирект через PHP

Действует на уровне сервера. Лучше использовать другой способ, потому что этот работает медленно. Через PHP перенаправление настраивают для сайтов, где редирект нужен на многих, но не на всех страницах.

Файл index.php расположен в корневой папке. Скачайте его и добавьте код или отредактируйте прямо в диспетчере файлов в панели управления хостингом.

На домен без www

<!--?php
header("Location: http://site.ru/", true, 301);
exit();
?-->

На домен с www

<!--?php
header("Location: http://www.site.ru/", true, 301);
exit();
?-->

Редирект через HTML

Редирект через HTML-код медленнее, он работает на стороне браузера. Код нужно добавить между тегами и страницы, с которой нужно перенаправить. В параметре content=»» указывают задержку по времени.

На домен без www

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

На домен с www

<meta http-equiv="refresh" content="0; url=http://www.site.ru/">

Редирект через JavaScript

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

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

На домен без www

<script type="text/javascript">
    window.location.replace("http://site.ru/");
</script>

Для задержки:

На домен с www

<pre><script>
    window.location.replace("http://www.site.ru/");
</script></pre>

Через cPanel

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

На домен без www

  1. В списке выберите нужный домен.
  2. В поле «Перенаправляет на» пропишите его с префиксом http://.
  3. Поставьте отметку у «Перенаправлять только с www»

На домен с www

  1. В списке выберите нужный домен.
  2. В поле «Перенаправляет на» пропишите его с префиксом http://www.
  3. Поставьте отметку у «Не перенаправлять www»

Для чего это нужно?

Если вам до сих пор не понятна работа и необходимость данного кода, тогда давайте разберем небольшой пример.

Допустим у вас в файле index.php вписан код, который должен срабатывать на каждой странице вашего сайта. Например указание кодировки страниц и вывод окна с какой нибудь рекламой.

Когда пользователь вписывает в адресную строку путь к файла вашего сайта, например mysite/account/login.php, то файл htaccess запускает код. В этом коде он проверяет, существует ли такой файл и если да, то вместе с кодом файла login.php, он запускает код файла index.php.

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

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

Типы редиректов

Итак, виды редиректов отличаются друг от друга по своему функционалу. Но, существует и второй фактор для их классификации — техническое исполнение редиректа. По нему выделяются такие варианты:

Htaccess-редирект

Htaccess — системный файл, который принадлежит к корневой структуре сайта. Чтобы получить к нему доступ необходимо зайти в панель управления хостинга, на котором размещён нужный веб-ресурс. Для настройки любого вида необходимо разместить в нём строку с соответствующим кодом.

Чтобы настроить этот тип редиректа, вам нужно перейти в каталог сайта и открыть файл .htaccess или создать его, если он не существует. Далее добавить в файл необходимые строки:

где:

  • old-site.ru — домен, с которого происходит редирект;
  • new-site.ru — домен, на который происходит редирект.

Ещё больше полезных материалов про редирект через .htaccess вы найдёте здесь. 

PHP-редиректы

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

Этот тип работает медленнее, чем htacces, но, если у вас сотни страниц для которых нужно настроить редиректы и сделать это нужно выборочно, а не для всех подряд, именно PHP может стать оптимальным вариантом.

Подробную инструкцию о том, как сделать PHP-редирект вы можете найти в нашей Базе знаний. 

JavaScript-редирект

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

Когда же его использовать? Например, при переезде на новый сайт, чтобы вывести на экран сообщение типа «сейчас вы будете автоматически переадресованы на наш новый сайт».

Настраивать JavaScript-редирект нужно в исходном коде страницы, с которой осуществляется перенаправление, изменив его текст между тегами <head>-</head>.

HTML-редирект

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

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

Другие решения

использование функция отправлять :

Вопреки мнению некоторых, не имеет никакого отношения к перенаправлению. Используй это только если вы хотите перенаправить вместо нормального исполнения.

example.php:

Результат или 3 казни:

Возобновление — обязательно / это городская легенда, которая не имеет ничего общего с реальным PHP. Не имеет ничего общего с клиентом, «уважающим» заголовок. Отправка заголовка не останавливает выполнение PHP независимо от используемого клиента.

94

Выведите JavaScript из PHP, используя echo, который сделает эту работу.

Вы не можете сделать это в PHP, если вы не буферизируете вывод страницы, а затем не проверяете состояние перенаправления. Это может быть слишком много хлопот. Помните, что заголовки — это первое, что отправляется со страницы. Большая часть перенаправления обычно требуется позже на странице. Для этого вы должны буферизовать весь вывод страницы и позже проверить условие перенаправления. В этот момент вы можете либо перенаправить заголовок страницы пользователя (), либо просто отобразить буферизованный вывод.

Подробнее о буферизации (преимущества)

91

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

здесь вы не столкнетесь ни с какой проблемой

75

Большинство из этих ответов забывают очень важный шаг!

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

51

или, если вы уже открыли теги php, используйте это:

Вы также можете перенаправить на внешние страницы, например:

Убедитесь, что вы включили или же

23

Многие из этих ответов верны, но они предполагают, что у вас есть абсолютный URL, что может быть не так. Если вы хотите использовать относительный URL и генерировать остальное, тогда вы можете сделать что-то вроде этого …

18

Заключительное слово

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

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

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

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

Настройка 301 редиректа для SEO

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

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

Первый вариант:

Второй вариант:

Перенаправление с site.ru на www.site.ru

Первый вариант:

Второй вариант:

У каждого ресурса должно быть выбрано основное зеркало, адрес которого и будет участвовать в поисковой выдачи. Для его выбора и используется эти перенаправления. Основным зеркалом может быть адрес как с www, так и без этого префикса.

И наоборот, с https на http

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

Структура URL адресов в админке

Обычно URL адреса в админке формируются по одной из следующих схем:

И сразу рассмотрим простой пример:

Итак, мы видим, что модулем здесь является products, а действием, к примеру, add. Что теперь с этим делать?

Если вы знакомы с ООП и MVC, тогда модулем для вас будет название класса, а действием — метод этого класса, который нужно запустить. Если действие не указано, то принято запускать метод под названием index.

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

Перепишем пример, написанный нами в единой точке входа, под новую схему URL:

Итак, мы берём 1-ый фрагмент URL и проверяем, существует ли в папке pages файл с таким названием.

Т.е. при переходе на страницу /test/test2 скрипт проверит существование файла /pages/test.php. Если файл есть — PHP выполнит этот файл, в противном случае выполнится файл /pages/404.php.

Как видите, при таком подходе нам больше не нужно прописывать соответствие URL-адресов и PHP-файлов. PHP сам будет искать нужный файл в папке pages по первому фрагменту URL.

Теперь осталось только создать файл pages/products.php. Сделаем небольшую заготовку:

Вот так выглядит обработка действий. Мы смотрим на второй фрагмент URL и ищем обработчик этого действия. Для каждого действия (add, update, delete) нужно прописать отдельный блок elseif.

Внутри обработчика add мы смотрим на то, каким методом пришёл запрос, GET или POST. Если GET — отображаем форму, если POST — добавляем товар.

Если вам не нравится вложенная проверка метода, можно сделать иначе. В файле index.php сохраним метод в отдельную переменную:

products.php

Готово. Да, если вам не нравится, что в коде 2 раза встречается одно и то же действие, только с разными методами, можете использовать немного упрощённую схему URL-адресов из фреймворка Laravel:

Добавление префикса /admin/ в URL

Немного изменим код index.php:

Теперь при запросе страницы /admin/products PHP будет искать файл с названием не products.php, а admin_products.php.

Переименуйте файл и не забудьте заменить в нём все $segments на $segments, поскольку в $segments теперь лежит модуль, а в $segments действие.

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

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

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

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

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

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

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

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

<html>
<head>
<title>Заголовок странички</title></head>
<body style=»margin: 0; padding: 0; overflow: hidden;»>
<iframe src=»https://yandex.ru/» height=»100%» width=»100%» frameborder=»0″ scrolling=»yes»></iframe>

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

</body>
</html>

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

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

P.S. Обратите внимание на страницу РЕКОМЕНДУЮ, где Вы найдете качественные бесплатные курсы по блоговедению и заработку в интернет.
Жду Ваших комментариев. Подписывайтесь на обновления блога. Дмитрий Леонов | leonov-do.ru

Как же сделать перенаправление всех запросов на index?

Для того чтобы это сделать, мы в корневой папке сайта создаем файл .htaccess. Данный файл необходимо открыть как обычный текстовик или с помощью программы для написания кода. Я открываю этот файл через программу Sublime Text.

ВНИМАНИЕ

Для файла .htaccess следует использовать права доступа 644 и загружать его в ASCII-режиме. Если ваш .htaccess файл не работает, то вам следует обратиться к системному администратору или в техподдержку вашего веб-хостинга и убедиться, что использование его разрешено для вашей учетной записи, так как некоторые хостинговые компании не позволяют его использование без предварительного разрешения, это в основном относится к бесплатным хостингам. Также, к сожалению, .htaccess не будет работать на Windows-серверах.

В файл htaccess вписываем следующий код.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php

Первая строка кода разрешает внесение изменений в работу сервера.

Вторая и третья строка кода добавляет условие при котором происходит проверка:

  • RewriteCond %{REQUEST_FILENAME} !-f – проверка наличия файла с таким названием
  • RewriteCond %{REQUEST_FILENAME} !-d –  проверка наличие директории с таким названием

Если название файла на который идет запрос указанно верно и такой файл существует, то происходит перенаправление запроса на файл index.php.

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

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

Adblock
detector