Редирект в 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);
}
Комментарии
0Нашли ошибку или хотите дополнить материал?