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

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

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

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

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

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

header('Location: https://example.com', true, 301);
exit();
PHP

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

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

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

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

header('Location: https://example.com', true, 301);
echo "<script>window.location.replace('https://example.com');</script>";
echo 'Перенаправление… Перейдите по <a href="https://example.com">ссылке</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('https://example.com/url-new');
}
PHP

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

$urls = array(
	array('/url-old-1', 'https://example.com/url-new-1'), 
	array('/url-old-2', 'https://example.com/url-new-2'), 
	array('/url-old-3', 'https://example.com/url-new-3'),
);
 
foreach ($urls as $row) {
	if ($_SERVER['REQUEST_URI'] == $row[0]) {
		redirect($row[1]);
	}
}
PHP
29.10.2017, обновлено 30.03.2020
23789

Комментарии

, чтобы добавить комментарий.

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

Примеры отправки AJAX JQuery
AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать контент и т.д. А функции JQuery значительно упрощают работу.
273508
+36
Пример парсинга html-страницы на phpQuery
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют...
62785
+26
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
55913
+20
Подключение к платежной системе Сбербанка
После регистрации в системе эквайринга Сбербанка и получив доступ к тестовой среде, можно приступить к интеграции с...
66928
+24
Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
28430
+8
Получить фото из Instagram без API
Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и...
24687
+7