На страницах сайтов постоянно что-то добавляется, удаляется и обновляется, чтобы в поисковиках была только актуальная информация и нужные страницы не выпадали из поиска применяются редиректы. Также редиректы используются после отправки форм чтобы не было возможности отправить форму несколько раз.
Основные коды редиректов
- 301 – текущая страница удалена на всегда, заменой старой считать новый URL.
- 302 – текущая страница временно не доступна, заменой считать пока новый URL.
- 303 – используется после отправки формы методом POST (подробнее Post/Redirect/Get - PRG).
Итак, сделать 301-й редирект можно так:
Но функция header()
не сработает если до ее вызова в браузер уже выводился какой-то контент и вызовет ошибку:
Warning: Cannot modify header information - headers already sent by…
Исправить ее можно использовав буферизацию вывода добавив в самое начало скрипта ob_start()
;
Также можно подстраховаться добавив JS-редирект и ссылку если функция header()
не сработает.
header('Location: https://example.com', true, 301);
echo "<script>window.location.replace('https://example.com');</script>";
echo 'Перенаправление… Перейдите по <a href="https://example.com">ссылке</a>.';
exit();
Упростить использование кода можно выделив его в отдельную функцию:
function redirect($url, $code = 301)
{
header('Location: ' . $url, true, $code);
echo "<script>window.location.replace('" . $url . "');</script>";
echo 'Перенаправление… Перейдите по <a href="' . $url . '">ссылке</a>.';
exit();
}
/* В index.php */
if ($_SERVER['REQUEST_URI'] == '/url-old') {
redirect('https://example.com/url-new');
}
Если редиректов много: