Как правильно сделать редирект PHP?
access_time
hourglass_empty
person_outline

Как правильно сделать редирект PHP?

Редирект PHP, или перенаправление — невероятно полезный инструмент, однако он может быть довольно опасным, если реализован неправильно.

Если вы читали наше введение в PHP 7.4 (англ.) и руководство по созданию сайта за 5 минут (англ.), то знаете, что для простого перенаправления пользователя на другую страницу можно использовать функцию header(). Однако эта функция не так проста, как кажется. В этом руководстве мы покажем вам, как правильно настроить PHP редирект, чтобы в дальнейшем у вас не возникло ни каких проблем.

Базовый метод настройки редиректа PHP

Большинство руководств скажут вам, что для создания PHP редиректа вы можете просто использовать функцию header() в верхней части ваших страниц. В этом случае вы используете функцию, чтобы отправлять новый URL, например:

header('Location: '.$newURL.php);

Поскольку эта функция должна предшествовать отправке в браузеры ваших пользователей какого-либо HTML или текста, её нужно поместить прямо вверху страницы. Это означает, что она должна стоять перед объявлением <!DOCTYPE>, перед кодом Java и PHP. Затем она отправит пользователей на новый URL-адрес.

Всё предельно ясно, однако функция header() не так проста, как кажется. Итак, давайте посмотрим, как правильно использовать эту функцию.

Die() и Exit()

Во-первых, вы должны использовать модификатор die() или exit() каждый раз, когда используете редирект. Если вкратце, то проблема в том, что сканеры и роботы могут игнорировать заголовки, и поэтому страница, с которой, как вы думали, вы перенаправляете, полностью доступна для них. Другими словами, если вы используете редирект путём отправки нового заголовка, чтобы защитить определённую страницу, это не даёт вам никакой защиты.

Вот почему вам нужно предотвратить обработку остальной части страницы. Для этого добавьте die() или exit() после перенаправления:

header("Location: .$newURL.php");
die();

Относительные и абсолютные URL

Теперь поговорим об относительных и абсолютных ссылках в переадресации. RFC 7231 позволяет использовать оба типа, однако, если вы используете относительные редиректы следует быть особенно осторожным. Дело в том, что некоторые конструкторы сайтов объединяют и переименовывают страницы PHP. Это означает, что если вы работаете над своим PHP через конструктор сайтов, все ваши редиректы могут просто поломаться.

К сожалению, на данный момент нет реального способа обойти эту проблему, кроме как внимательно следить за тем, на что указывают ваши редиректы.

Коды статусов

Третья проблема стандартных перенаправлений PHP заключается в том, что оператор PHP «location» по умолчанию возвращает код HTTP 302 (англ.). Вам нужно запретить ему это делать, поскольку многие браузеры реализуют этот код совсем не так, как он должен функционировать на само деле: они, по сути, используют команду GET вместо выполнения «настоящего» редиректа.

Поэтому при создании редиректов на PHP рекомендуется указывать возвращаемый код статуса. К сожалению, нет единого мнения, какой код стоит указывать. HTTP 301 указывает на постоянное перенаправление, что может вызвать проблемы при восстановлении исходной страницы. HTTP 303, к сожалению, воспринимается многими браузерами как «другой» и может вызвать проблемы с индексированием вашей страницы в поисковых системах.

Пока этот вопрос остаётся открытым, используйте HTTP 303.

Проверка документации

Помимо основных мер предосторожности, описанных выше, вам следует потратить некоторое время на то, чтобы прочитать документацию по использованию редиректов PHP. Ознакомьтесь с руководством по PHP и документацию W3C (англ.), чтобы быть уверенными в своих действиях и выполнить все настройки в соответствии с последними стандартами.

Кроме прочтения рекомендованных материалов, также не забудьте защитить свой сайт от распространённых уязвимостей. Если вы уже используете редиректы PHP, скорее всего, вам придётся провести аудит безопасности вашего сайта.

Логотип и Заголовок "Список Уязвимостей" на Сайте PrivacyCanada

Другие методы

Учитывая все эти проблемы, вы, вероятно, задаётесь вопросом, зачем вообще использовать редиректы PHP. И это вполне логический вопрос. Несмотря на то, что PHP редирект обычно выполняется быстрее, чем другие типы перенаправлений, и, следовательно, является инструментом повышения скорости сайта, существуют и другие варианты.

Есть два основных подхода. Вы можете использовать элемент HTML <meta> для перенаправления из HTML-части вашей страницы или же использовать JavaScript. Первый подход — <meta> будет выглядеть так:

<meta http-equiv="refresh" content="0;url=newpage.php">

Второй подход — с использованием JavaScript — выглядит немного элегантней и более профессионально:

window.location.replace("http://newpage.php/");

Оба варианта будут выполняться немного медленнее, чем перенаправление header(), однако являются более гибкими.

Заключительное слово

Описанные выше шаги гарантируют, что редиректы PHP будут настроены правильно. Однако, если вы используете большое количество перенаправлений, скорее всего, вам стоит переосмыслить структуру вашего сайта.

Для этого есть несколько веских причин. Во-первых, не все веб-хосты одинаковы, и если вы отправляете всех посетителей обходным путём вокруг сайта, это может повлиять на его производительность. Частично это можно исправить, используя хорошего провайдера хостинга.

Вторая причина заключается в том, что страница, с которой вы перенаправляете, может собирать данные о ваших посетителях без вашего ведома, особенно если вы используете программное обеспечение веб-аналитики для отслеживания производительности вашего сайта. В нашем мире пост-GDPR (англ.) это может иметь серьёзные последствия.

Подбивая итоги, будьте осторожны с редиректами PHP, используйте их правильно и только там и тогда, когда это абсолютно необходимо.

Автор

Author

Olha L. / @olha

Ольга уже около пяти лет работает менеджером в сфере IT. Написание технических заданий и инструкций — одна из её главных обязанностей. Её хобби — узнавать что-то новое и создавать интересные и полезные статьи о современных технологиях, веб-разработке, языках программирования и многом другом.

Схожі уроки

Залиште відповідь

Коментар*

Ім'я*

Email*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Долучитися до Hostinger зараз!