Что такое внутренняя переадресация и зачем она нужна
Внутренняя переадресация — это процесс автоматического перенаправления посетителей и поисковых роботов с одного URL вашего сайта на другой, находящийся внутри того же домена. Это полезно, когда вы меняете структуру сайта, удаляете или перемещаете страницы, или хотите направить трафик на более релевантный контент.
В WordPress часто приходится сталкиваться с необходимостью настроить такие переадресации без установки дополнительных плагинов, чтобы минимизировать нагрузку на сайт и избежать конфликтов. В этой статье я расскажу, как реализовать внутреннюю переадресацию программно, используя собственные функции и хуки WordPress.
Основные методы реализации внутренней переадресации в WordPress
Использование хука template_redirect
Хук template_redirect позволяет перехватить процесс загрузки шаблона и выполнить переадресацию до вывода страницы. Это наиболее подходящий момент для реализации редиректов.
Пример функции с префиксом wplog, которая перенаправит пользователя с URL /old-page/ на /new-page/:
function wplog_internal_redirect() {
if (is_page('old-page')) {
wp_redirect(site_url('/new-page/'), 301);
exit;
}
}
add_action('template_redirect', 'wplog_internal_redirect');В этом коде проверяется, что текущая страница — old-page, и выполняется 301 редирект на new-page. Очень важно после wp_redirect вызывать exit, чтобы остановить дальнейшее выполнение скрипта.
Переадресация с помощью wp_safe_redirect
Если нужно гарантировать, что редирект выполняется только на допустимый URL внутри вашего сайта, стоит использовать wp_safe_redirect:
function wplog_safe_internal_redirect() {
if (is_page('old-about')) {
wp_safe_redirect(home_url('/about-us/'), 301);
exit;
}
}
add_action('template_redirect', 'wplog_safe_internal_redirect');Этот метод предотвращает редиректы на внешние URL, что повышает безопасность.
Как организовать множественные внутренние переадресации через массив
Если у вас много страниц, которые нужно перенаправить, лучше хранить соответствия в массиве и обрабатывать их циклом. Это упростит управление и масштабирование:
function wplog_batch_redirects() {
$redirect_map = array(
'old-page-1' => '/new-page-1/',
'old-page-2' => '/new-page-2/',
'old-category/old-post' => '/new-category/new-post/',
);
$current_url = trim($_SERVER['REQUEST_URI'], '/');
foreach ($redirect_map as $old_slug => $new_url) {
if ($current_url === trim($old_slug, '/')) {
wp_safe_redirect(site_url($new_url), 301);
exit;
}
}
}
add_action('template_redirect', 'wplog_batch_redirects');Обратите внимание, что здесь мы используем глобальный массив соответствий и сравниваем текущий URI с ключами массива. Такой подход гибок и легко обновляем.
Переадресация для пользовательских типов записей и таксономий
Иногда нужно сделать редиректы не только для страниц и постов, но и для кастомных типов записей или таксономий. Для этого в функции можно использовать условные теги WordPress:
function wplog_cpt_redirects() {
if (is_singular('product') && get_post_field('post_name', get_queried_object_id()) === 'old-product') {
wp_redirect(site_url('/new-product/'), 301);
exit;
}
if (is_tax('genre', 'old-genre')) {
wp_redirect(site_url('/genre/new-genre/'), 301);
exit;
}
}
add_action('template_redirect', 'wplog_cpt_redirects');Здесь проверяется условие для кастомного типа записи product и таксономии genre. Это позволяет реализовать гибкую логику редиректов.
Как отладить и проверить работу переадресаций
После добавления функций редиректа важно проверить их работу. Для этого:
- Откройте старый URL в браузере — он должен автоматически перейти на новый.
- Проверьте HTTP-статус ответа — он должен быть 301 или 302.
- Используйте расширения браузера, например Redirect Path, чтобы видеть цепочки редиректов.
- Проверяйте ошибки в логах сервера и WordPress.
Если редиректы не срабатывают, убедитесь, что функции подключены в правильном месте, и что другие плагины или правила .htaccess не конфликтуют с ними.
Преимущества реализации внутренней переадресации без плагинов
Главные плюсы — это контроль и производительность. Вы не нагружаете сайт дополнительными плагинами, которые увеличивают время загрузки и могут конфликтовать. К тому же, код легко адаптировать под свои нужды и обновлять.
Особенно полезен такой подход для сайтов с небольшой и средней тематикой, где нужен точечный контроль над редиректами.
Рекомендации по безопасности и производительности
При работе с редиректами важно не создавать бесконечные циклы, которые могут привести к ошибкам и падению сайта. Всегда проверяйте, что старые URL корректно перенаправляются на новые и что нет конфликтующих правил.
Также избегайте выполнения тяжелых операций внутри функций редиректа — код должен быть легким и быстрым, чтобы не замедлять загрузку страниц.
Используйте wp_safe_redirect для защиты от внешних перенаправлений и всегда вызывайте exit после редиректа.