PHP перенаправление на другую страницу

Переадресация с помощью meta-тега refresh

Воспользуемся html тегами. Тег, указывающий на время обновления страницы, выглядит так:

1 <meta http-equiv=»refresh» content=»5″ />

content=»5″ указывает на время задержки между обновлениями страницы. Счет ведётся в секундах. Теперь используем этот мета-тег для переадресации.

1 <meta http-equiv=»refresh» content=»5;url=http://www.borpost.ru» />

Тег в таком виде заставит обновить страницу в браузере через 5 секунд, заменив адрес страницы на новый, указанный в теге.
Но нас 5 секунд не устраивают, поэтому окончательный вариант тега будет таковым:

1 <meta http-equiv=»refresh» content=»0;url=http://www.borpost.ru» />

Минусом переадресации тегами и javascript является то, что в случае переезда сайта, смены домена, или перемещении файлов, статья для пользователя остаётся той же, а для поисковых систем — нет. Поэтому при переезде сайта категорически нельзя использовать эти методы, так как основной сайт выпадет из результатов поиска из-за своей пустоты, а новый сайт не попадёт в результаты из-за «плагиата». Да, да, поисковые системы оценят сайт как плагиатчик. И этот сайт украл содержание с вашего предыдущего сайта. Плагиатчики значительно опускаются в результатах поиска. Не делайте ошибок.

Переадресация средствами сервера apache (.htaccess)

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

1 2 3 Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.scriptsite.ru/$1

Данная запись в файле .htaccess (файл должен лежать в корне старого сайта) перенаправит любой запрос на домен scriptsite.ru, при этом всё адреса перенаправляются на соответствующие им на новом домене. Например, olddomain.ru/documents/page.htm перенаправится на www.scriptsite.ru/documents/page.htm , что весьма удобно. Если вы не хотите перенаправлять с домена на домен, а просто хотите перенаправить с одного адреса страницы на другой, пропишите следующие строки:

1 2 3 RewriteEngine on RewriteBase / RewriteRule ^old.htm$ /newcategory/rewrite.html

Таким образом мы перенаправляем запрос с файла old.htm , лежащего в корневой директории сайта, на файл rewrite.html, лежащий в директории newcategory.

Как вы уже успели заметить (а кто не успел, у того ещё есть последний шанс), RewriteRule поддерживает регулярные выражения, что позволяет творить с переадресацией что угодно.
Например, я делал файл .htm изображением ( RewriteRule ^(.*).htm$ $1.jpg) , т.е. с адреса dog.htm браузер перекидывал меня на картинку dog.jpg. Я не хочу расписывать все возможности модуля mod_rewrite, с чьей помощью мы сейчас работали. Об этом написано немало уроков, но, если хотите, можете сами поискать дополнительную информацию об этом. (Например, на официальном сайте, правда, на английском языке.)

Преимуществом этого способа является его безболезненность. То есть перенос материалов и последующая переадресация со старого адреса на новый никак не отразятся на позиции сайта в поисковых системах. Система работает так же, как и переадресация на php, за исключением того, что она не требует установленного php. Но есть и минус: переадресация через mod-rewrite нагружает сервер немного сильнее, чем такая же переадресация через php. Да и модуль mod-rewrite не всегда бывает установлен на apache. Хотя сейчас большинство хостеров и ставят его, продолжают встречаться единичные клинические случаи, когда этот модуль не установлен.

Выбирайте способ, который вам больше подходит, и устанавливайте его на сайт!

Использование функции 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 «<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.

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

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

<meta http-equiv=»Location» content=»http://example.com/final.php»> <!— The following line will redirect after the given number of seconds. Zero in our case. —> <meta http-equiv=»refresh» content=»0;url=http://example.com/final.php»>

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

<meta http-equiv=»refresh» content=»8″>

Заключение

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

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

Еще не голосовали рейтинг из ХорошоПлохо Ваш голос принят

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

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