Автоматическое перенаправление пользователя браузера с одной страницы сайта на другую этого же сайта, или другого, заданную программистом.
Также, редиректом можно воспользоваться для перебрасывания посетителей со старого имени домена на новый со сменой URL-адреса в адресной строке веб-браузера.
Такой редирект на PHP можно выполнить с помощью функции header().
Эта функция добавляет заголовок к документу, пересылаемому браузеру. Ее необходимо вызывать до первой команды вывода сценария.
Сценарий, или скрипт - программа, которая запускается пользователем на сервере, обрабатывающая данные и генерирующая HTML-страницу.
Оператор вывода:
- команда echo,
- текст вне <?php ... и ?>,
- текстом, также, считаются пробелы и переводы строк,
- предупреждение, сгенерированное PHP и выведененное в браузер.
Если не выполнено это условие использования header(), то выскочит подобное сообщение:
Warning: Cannot modify header information - headers already sent by (output started at щей.рф\article.php?id=22:29) in article.php?id=22 on line 44
Сообщается о том, что на строке 29 сценария article.php?id=22 произошел вывод. В строке 44 функция header() вызывает ошибку.
Задача:
1. Создайте 2 текстовых поля с метками "Число 1" и "Число 2".
2. На отдельной странице сделайте обработку этой формы, вычислив сумму двух чисел.
3. Затем сделайте редирект обратно на страницу с формой и там выведите эту сумму.
Решение:
Файл с формой для вычисления dex.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Редирект</title>
</head>
<body>
<form action="scrip.php" method="post">
<p>
Ввести число 1: <input type="text" name="int1">
Ввести число 2: <input type="text" name="int2">
Сумма двух чисел:
<?php
echo $_GET['x'];
?>
</p>
<br>
<p>
<input type="submit">
</p>
</form>
</body>
</html>
Файл обработчик вычисления scrip.php. Одна из функций для редиректа - header с добавлением заголовка Location.
<?php
$int1 = $_POST['int1'];
$int2 = $_POST['int2'];
$x = ($int1 + $int2);
header ("Location: dex.php?x=$x");
?>
Проверить работу скрипта можно в новом окне.
Редирект с помощью заголовка Location с абсолютным адресом
Функция header() отправляет заголовки браузеру или клиенту. В эту функцию передается заголовок ответа сервера с именем Location и его значение адреса, отделенное от имени двоеточием. (Например, header ("Location: http://example.com");). Заголовок Location указывает браузеру клиента, что требуется немедленно перейти по указанному адресу (в нашем случае http://example.com), не дожидаясь тела документа, которое следует после заголовков.
Поэтому после такого заголовка не должно быть записей скрипта, кроме функции exit; Она служит для прекращения выполнения кода на текущей странице. Так как дальнейшее выполнение кода сервером не имеет смысла - клиент уже перенаправился на другую страницу (осуществился редирект).
После Location указывается абсолютный путь, а не относительный.