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

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

Основные коды редиректов

  • 301 – текущая страница удалена на всегда, заменой старой считать новый url.
  • 302 – текущая страница временно не доступна, заменой считать пока новый url.
  • 303 – используется после отправки формы методом POST (подробнее Post/Redirect/Get - PRG).

Итак, сделать 301-й редирект можно так:

header('Location: http://test.ru', true, 301);
exit();
PHP

Но функция header не сработает если до ее вызова в браузер уже выводился какой-то контент и вызовет ошибку:

Warning: Cannot modify header information - headers already sent by…

Исправить ее можно использовав буферизацию вывода добавив в самое начало скрипта ob_start();

Также можно подстраховаться добавив JS редирект и ссылку если функция header() не сработает.

header('Location: http://test.ru', true, 301);
echo "<script>window.location.replace('http://test.ru');</script>";
echo 'Перенаправление… Перейдите по <a href="http://test.ru">ссылке</a>.';
exit();
PHP

Упростить использование кода можно выделив его в отдельную функцию:

function redirect($url, $code = 301)
{
	header('Location: ' . $url, true, $code);
	echo "<script>window.location.replace('" . $url . "');</script>";
	echo 'Перенаправление… Перейдите по <a href="' . $url . '">ссылке</a>.';
	exit();
}

// В index.php
if ($_SERVER['REQUEST_URI'] == '/url-old') {
	redirect('http://test.ru/url-new');
}
PHP

Если редиректов много:

$urls = array(
	array('/url-old-1', 'http://test.ru/url-new-1'), 
	array('/url-old-2', 'http://test.ru/url-new-2'), 
	array('/url-old-3', 'http://test.ru/url-new-3'),
);
 
foreach ($urls as $row) {
	if ($_SERVER['REQUEST_URI'] == $row[0]) {
		redirect($row[1]);
	}
}
PHP
29.10.2017, обновлено 23.09.2019 1398

Поделится

Другие публикации

Ниже приведён список MIME-заголовков и расширений файлов.
11.07.2019 297
AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать...
23.12.2016 5201
В статье описана регистрация клиента, получения access token, примеры использования методов API Instagram на PHP.
14.03.2017 9829
После регистрации в системе эквайринга Сбербанка и получив доступ к тестовой среде, можно приступить к интеграции с...
22.10.2018 4858
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
26.10.2018 2094
Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.
17.11.2018 8185