Как сделать переход на другую страницу в PHP с помощью header
В PHP для перехода на другую страницу используется функция header() с заголовком Location. Это стандартный и наиболее распространенный способ реализации редиректов.
Основной синтаксис
Для выполнения простого перехода на другую страницу используйте следующий код:
<?php
header("Location: страница.php");
exit();
?>
Примеры использования
Переход на страницу в той же директории:
<?php
header("Location: about.php");
exit();
?>Переход на страницу в корне сайта:
<?php
header("Location: /contact.php");
exit();
?>Переход на внешний сайт:
<?php
header("Location: https://www.example.com");
exit();
?>Важные правила использования
1. Вызывайте header() до любого вывода
Функция header() должна вызываться до того, как будет отправлен любой контент в браузер. Если перед header() есть HTML-теги, пробелы или любой другой вывод, возникнет ошибка:
textWarning: Cannot modify header information - headers already sent by...
Неправильно:
<html>
<?php
header("Location: page.php"); // Ошибка!
?>Правильно:
<?php
header("Location: page.php");
exit();
?>
<html>2. Всегда используйте exit() или die()
После вызова header("Location: ...") обязательно добавляйте exit() или die(). Это останавливает выполнение PHP-скрипта и предотвращает нежелательное поведение:
<?php
header("Location: success.php");
exit(); // Обязательно!
// Этот код не выполнится
echo "Этот текст не будет показан";
?>Без exit() скрипт продолжит выполняться, что может привести к:
- Отображению конфиденциальной информации
- Непредсказуемому поведению
- Проблемам безопасности
Типы редиректов
302 редирект (временный) — по умолчанию
<?php
header("Location: new-page.php");
exit();
?>301 редирект (постоянный)
Для SEO-оптимизации и постоянного перемещения страниц используйте 301 редирект:
<?php
header("Location: new-page.php", true, 301);
exit();
?>Решение проблем
Использование буферизации вывода
Если заголовки уже отправлены (например, из-за пробелов в файлах), используйте буферизацию:
<?php
ob_start(); // Начинаем буферизацию
// Ваш код
header("Location: page.php");
ob_end_flush(); // Завершаем буферизацию
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();
}
// Использование
redirect('https://example.com');
?>Практические примеры
Условный редирект
<?php
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
?>Редирект после обработки формы
<?php
if ($_POST['submit']) {
// Обработка данных формы
$result = processForm($_POST);
if ($result) {
header("Location: success.php");
exit();
} else {
header("Location: error.php");
exit();
}
}
?>Альтернативные методы
JavaScript-редирект (как резервный)
<?php
header('Location: page.php', true, 301);
echo "<script>window.location.replace('page.php');</script>";
echo 'Если автоматический переход не работает, <a href="page.php">нажмите здесь</a>';
exit();
?>Meta-редирект с задержкой
<?php
header('Refresh: 5; URL=page.php');
echo 'Через 5 секунд вы будете перенаправлены...';
exit();
?>Использование функции header() с заголовком Location — это профессиональный и надежный способ реализации перехода между страницами в PHP. Главное — помните о правилах: вызывайте до любого вывода и всегда завершайте скрипт функцией exit().