Функция wp_safe_redirect()
в WordPress предназначена для выполнения безопасного перенаправления (редиректа) пользователей на указанную страницу. Основная задача функции — проверить, что указанный URL принадлежит разрешённому хосту (обычно это домен текущего сайта). Если хост не является безопасным или разрешённым, функция автоматически перенаправит пользователя на административную панель (wp-admin
) текущего сайта.
Эта функция особенно полезна для предотвращения вредоносных атак, где злоумышленник может попытаться перенаправить пользователя на внешние сайты без ведома администратора сайта.
wp_safe_redirect( string $location, int $status = 302, string|false $x_redirect_by = 'WordPress' ): bool
Параметры
$location
(string, обязательный): URL или путь, куда нужно перенаправить пользователя. Если URL ведет на хост, который не входит в список разрешённых, произойдёт редирект на административную панель.$status
(int, опциональный): HTTP-код ответа. По умолчанию используется код 302 (перенаправление временно).$x_redirect_by
(string|false, опциональный): Приложение или плагин, выполняющий редирект. По умолчанию добавляется заголовокX-Redirect-By: WordPress
, но можно передать свою строку илиfalse
, чтобы исключить заголовок.
Возвращаемое значение
true
: Если перенаправление успешно.false
: Если перенаправление было отменено.
Особенности использования
wp_safe_redirect()
не завершает выполнение скрипта автоматически, поэтому после вызова функции необходимо использоватьexit();
, чтобы остановить дальнейшее выполнение кода.
Пример 1: Безопасное перенаправление с проверкой формы
Предположим, что у нас есть форма, которая отправляет URL для редиректа. Чтобы убедиться, что перенаправление происходит только на внутренние страницы сайта, используем wp_safe_redirect()
.
if ( isset( $_POST['location'] ) && $location = $_POST['location'] ) {
wp_safe_redirect( $location );
exit;
}
В этом примере пользователь отправляет URL через POST-запрос, а функция проверяет, что этот URL является безопасным. Если хост не разрешён, редирект будет отменён.
Пример 2: Перенаправление на определённую страницу
В данном примере осуществляется безопасное перенаправление на главную страницу сайта с указанием заголовка HTTP 301 (постоянный редирект):
wp_safe_redirect( home_url(), 301 );
exit;
Пример 3: Изменение заголовка X-Redirect-By
Если вы хотите указать, что редирект был выполнен вашим плагином или темой, можно использовать параметр $x_redirect_by
:
wp_safe_redirect( home_url(), 302, 'MyPlugin' );
exit;
В ответе браузера появится заголовок: X-Redirect-By: MyPlugin
.
Фильтры
wp_safe_redirect_fallback
: Позволяет задать альтернативный URL для редиректа, если исходный URL не прошёл проверку на безопасность.
Заключение
Функция wp_safe_redirect()
— это важный инструмент для защиты вашего сайта от несанкционированных перенаправлений на внешние ресурсы. Используя её, вы можете гарантировать, что пользователи всегда будут перенаправлены на проверенные и безопасные URL-адреса.