Как сделать переход на другую страницу в PHP с помощью header

В PHP для перехода на другую страницу используется функция header() с заголовком Location. Это стандартный и наиболее распространенный способ реализации редиректов.

Основной синтаксис

Для выполнения простого перехода на другую страницу используйте следующий код:

PHP
<?php
	header("Location: страница.php");
	exit();
?>

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

Переход на страницу в той же директории:

PHP
<?php
	header("Location: about.php");
	exit();
?>

Переход на страницу в корне сайта:

PHP
<?php
	header("Location: /contact.php");
	exit();
?>

Переход на внешний сайт:

PHP
<?php
	header("Location: https://www.example.com");
	exit();
?>

Важные правила использования

1. Вызывайте header() до любого вывода

Функция header() должна вызываться до того, как будет отправлен любой контент в браузер. Если перед header() есть HTML-теги, пробелы или любой другой вывод, возникнет ошибка:

textWarning: Cannot modify header information - headers already sent by...

Неправильно:

PHP
<html>
<?php
	header("Location: page.php"); // Ошибка!
?>

Правильно:

PHP
<?php
	header("Location: page.php");
	exit();
?>
<html>

2. Всегда используйте exit() или die()

После вызова header("Location: ...") обязательно добавляйте exit() или die(). Это останавливает выполнение PHP-скрипта и предотвращает нежелательное поведение:

PHP
<?php
	header("Location: success.php");
	exit(); // Обязательно!
	// Этот код не выполнится
	echo "Этот текст не будет показан";
?>

Без exit() скрипт продолжит выполняться, что может привести к:

  • Отображению конфиденциальной информации
  • Непредсказуемому поведению
  • Проблемам безопасности

Типы редиректов

302 редирект (временный) — по умолчанию

PHP
<?php
	header("Location: new-page.php");
	exit();
?>

301 редирект (постоянный)

Для SEO-оптимизации и постоянного перемещения страниц используйте 301 редирект:

PHP
<?php
	header("Location: new-page.php", true, 301);
	exit();
?>

Решение проблем

Использование буферизации вывода

Если заголовки уже отправлены (например, из-за пробелов в файлах), используйте буферизацию:

PHP
<?php
	ob_start(); // Начинаем буферизацию
	// Ваш код
	header("Location: page.php");
	ob_end_flush(); // Завершаем буферизацию
	exit();
?>

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

Создайте функцию для упрощения использования:

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

// Использование
redirect('https://example.com');
?>

Практические примеры

Условный редирект

PHP
<?php
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit();
}
?>

Редирект после обработки формы

PHP
<?php
if ($_POST['submit']) {
    // Обработка данных формы
    $result = processForm($_POST);
    
    if ($result) {
        header("Location: success.php");
        exit();
    } else {
        header("Location: error.php");
        exit();
    }
}
?>

Альтернативные методы

JavaScript-редирект (как резервный)

PHP
<?php
	header('Location: page.php', true, 301);
	echo "<script>window.location.replace('page.php');</script>";
	echo 'Если автоматический переход не работает, <a href="page.php">нажмите здесь</a>';
	exit();
?>

Meta-редирект с задержкой

PHP
<?php
	header('Refresh: 5; URL=page.php');
	echo 'Через 5 секунд вы будете перенаправлены...';
	exit();
?>

Использование функции header() с заголовком Location — это профессиональный и надежный способ реализации перехода между страницами в PHP. Главное — помните о правилах: вызывайте до любого вывода и всегда завершайте скрипт функцией exit().