PHP: Редирект - перенаправление на страницу

Редирект в PHP - это способ перенаправить пользователя на другую страницу или сайт с помощью HTTP-заголовков. Такой метод часто используется при изменении структуры сайта, авторизации, обработке форм или защите от прямого доступа к файлам. Реализуется с помощью сетевой функции header().

// 1. Редирект в корень сайта
// второй параметр определяет, заменит ли текущий заголовок предыдущий аналогичный заголовок
// третий параметр определяет код переадресации (301, 302, 303, 304, 307, 308)
header("Location: /", true, 302);
exit;

// Или так
header("Location: https://" . $_SERVER['HTTP_HOST'] . "/", true, 302);
exit;


// 2. Редирект на сторонний сайт
header("Location: https://site.ru", true, 302);
exit;

// или если редирект постоянный (SEO-friendly):
header("Location: https://site.ru", true, 301);
exit;


// 3. Редирект или переход через 15 секунд
header('Refresh: 15; URL=http://site.ru'); 
echo '<meta http-equiv="refresh" content="15;url=https://site.ru">';
echo "Вы будете перенаправлены через 15 секунд...";
exit;

// Постоянный редирект (301)
header("Location: https://site.ru", true, 301);
exit();

Универсальная функция для PHP-редиректа

function redirect( string $url, int $status = 302): void 
{
	// Очистка вывода — важно, если что-то было выведено ранее
	if (ob_get_length()) ob_end_clean();

	// Разрешённые коды редиректов
	$allowed = [301, 302, 303, 307, 308];
	if( !in_array( $status, $allowed, true ) )
	{
		$status = 302; // по умолчанию временный
	}

	// Фиксация абсолютного URL (защита от инъекций)
	if( !preg_match('~^https?://~i', $url) )
	{
		$scheme = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
		$host = $_SERVER['HTTP_HOST'] ?? 'example.com';
		$url = $scheme . '://' . $host . '/' . ltrim($url, '/');
	}

	// Установка заголовков
	header("Location: $url", true, $status);
	exit;
}

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

// 1. На главную (302)
redirect('/');

// 2. 301 редирект с http на https
if( empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] === 'off' )
{
	redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301);
}
up: Просмотров: 2.4k
Материал помог? Оценка помогает находить устаревшие и спорные решения.
Оценки до обновления материала
  • Полезно1

Комментарии

0

Нашли ошибку или хотите дополнить материал?

Комментариев пока нет.Можно первым дополнить материал или сообщить об ошибке.
Telegram