ГлавнаяРазноеКак настроить редиректы в WordPress

Как настроить редиректы в WordPress

Редирект — это перенаправление браузера с одной веб-страницы на другую. В этой статье мы расскажем чем могут быть полезны подобные перенаправления, и рассмотрим несколько вариантов настройки редиректов в WordPress.

Зачем нужны редиректы

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

При смене формата постоянных ссылок (ЧПУ) в WordPress, тоже часто настраивают редиректы, хотя во многих случаях ядро WordPress может самостоятельно настроить внутренние перенаправления. Это также касается смены названия определенной статьи или страницы.

Редиректы также используются для создания упрощенных или укороченных версий некоторых более длинных адресов. Например на WP Magazine мы используем адрес wpmag.ru/subscribe для переадресации пользователей на форму подписки на рассылку MailChimp. Плюсом в таком подходе является то, что при смене провайдера почтовых рассылок, нам нужно будет изменить адрес лишь в одном месте.

Типы редиректов

Существует два основных типа редиректов — постоянный (301) и временный (302, или иногда 307). Числа в скобках это коды, используемые в протоколе HTTP при перенаправлении.

Проверка редиректа в Google Chrome

Проверка редиректа в Google Chrome

Чтобы узнать, какой тип редиректа используется в конкретном случае, можно воспользоваться вкладкой Network/Сеть в панели для разработчиков браузера Chrome или Firefox, и просмотреть заголовки передаваемые веб-сервером.

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

Редирект с помощью плагина в WordPress

Самым популярным плагином для работы с редиректами в WordPress является Redirection. Данный плагин насчитывает более двух миллионов скачиваний и полностью совместим с последней версией WordPress.

Плагин Redirection позволяет создавать неограниченное количество редиректов, просматривать статистику по перенаправлениям, а также отслеживать ошибки 404 (не найдено) на сайте WordPress. Redirection также поддерживает регулярные выражения.

В качестве альтернативы можно рассмотреть более новый плагин Safe Redirect Manager от разработчиков из компании 10up. Данный плагин имеет более приятный пользовательский интерфейс, поддерживает регулярные выражения и полностью поддерживает режим Multisite.

Плагин Simple Redirect Manager

Плагин Simple Redirect Manager

Следует также упомянуть плагин Simple 301 Redirects, который является более простым решением для перенаправлений в WordPress. Именно данный плагин мы используем на сайте WP Magazine.

Плагин Simple 301 Redirects

Плагин Simple 301 Redirects

Редирект с помощью .htaccess

Если ваш хостинг-провайдер использует веб-сервер Apache, то вам наверняка предоставлен доступ к дополнительному файлу конфигурации .htaccess, в котором можно настроить редиректы, например:

Redirect 301 /subscribe http://example.org/path/to/subscribe

А с помощью директивы RedirectMatch в файле .htaccess можно настроить редиректы с использованием регулярных выражений:

RedirectMatch ^/foo/(.*)$ http://example.org/bar/$1

Если на вашем сервере используется nginx, то редиректы можно настроить в файле конфигурации веб-сервера с помощью директивы rewrite в контексте server. Учтите, что если вы используете shared-хостинг, прямого доступа к файлам конфигурации nginx у вас скорее всего не будет, но большинство хостинг-провайдеров позволяют добавить перенаправления через специальный интерфейс, или с помощью службы технической поддержки.

rewrite ^/foo/(.*)$ http://example.org/bar/$1 permanent;

Плюсом данных методов является то, что редиректы обрабатываются еще до запуска обработчика .php файлов и WordPress, поэтому такие редиректы как правило создают меньше нагрузки на сервер, хотя при грамотном кэшировании HTTP запросов в WordPress, это не имеет значения.

Использование wp_redirect() и wp_safe_redirect()

В WordPress есть две встроенные функции для редиректов: wp_redirect() и wp_safe_redirect().

Данные функции отличаются только тем, что wp_safe_redirect() проверяет адрес и сравнивает его со списком «разрешенных» хостов. Этим списком можно управлять с помощью специального фильтра allowed_redirect_hosts.

Вторым аргументом к функциям можно указать тип редиректа, например 301 или 302. Использовать эти функции можно в собственном плагине, что может быть легкой альтернативой выше-упомянутым плагинам, особенно для опытных разработчиков WordPress:

add_action( 'template_redirect', function() {
    if ( preg_match( '#^/subscribe/?$#i', $_SERVER['REQUEST_URI'] ) ) {
        wp_redirect( 'http://example.org/path/to/subscribe', 301 );
        exit;
    }
} );

Заключение

В заключение стоит отметить, что редиректы это первое, что чаще всего теряется при переезде сайта от одного хостинг-провайдера к другому. Поэтому все редиректы лучше хранить в одном месте.

Также советуем использовать инструменты для веб-мастеров от поисковых систем Google и Яндекс. Они покажут вам несуществующие страницы на вашем сайте, на которые ссылаются другие страницы. Подобное поведение часто является результатом потерянных редиректов или опечаток в адресах.

Подписаться на рассылку

Подписаться → Подпишитесь на бесплатную рассылку журнала WP Magazine и получайте новости, события, подборки тем и плагинов, уроки, советы и многое другое в мире WordPress!

  • Looler

    Спасибо, очень полезная и нужна тема.

    P.S.: больше не теряйтесь «на долго» ))))))

  • Спасибо, поделился. Могу еще порекомендовать простой плагин Safe Redirect Manager.

  • Denis Creative

    Плагин Simple 301 Redirects — у него есть минус, нельзя добавить много редиректов за раз, после каждого добавленного редиректа нужно нажать «Сохранить изменения», что не очень удобно, если нужно добавить много перенаправлений.

    • Alex Niktov

      Да, присоединяюсь к мнению Дениса… Константин, что вы можете порекомендовать для того случая, когда нужно изменить ЧПУ у нескольких тысяч страниц?

      • Могу порекомендовать написать PHP-скрипт, который вставит все требуемые редиректы, или свой плагин куда вы сможете вшить конкретные шаблоны для перенаправления с определенной логикой.

        • Alex Niktov

          Спасибо за совет, но я имел в виду готовое решение — не программист я, увы… и даже не вэбмастер…

  • Ivan Panfilov

    проще добавить проверку в index.php

    в обход ядра.
    массив (урл источник => урл редирект)
    проверка по ключу $_SERVER[REQUEST_URI] и если существует header(‘location…)

    с этими cms вечно проблема — плагин или стандартный функционал редиректа работает не так как надо.

    • Все ваши изменения в index.php пропадут при следующем обновлении ядра WordPress. Расширять функционал WordPress необходимо всегда плагинами, а не править файлы ядра.

      • Ivan Panfilov

        да. я в курсе. поэтому приходится добавлять после обновлений — благо это всего 1 строка в самом начале:
        include checker.php

        подскажите какой хук запускается самым первым — до запросов БД и прочей инициализации?
        суть проблемы:
        мне нужно проверить REQUEST_URI на «валидность» и выдать 404 в случае если урл не сущесвующий. иначе имеем ненужную нагрузку при несущесвующих запросах.
        боты постоянно запрашивают всякую хрень, урлы которой не сущесвует даже на сайте
        а вордпресс пытается разрулить урл и нагружает БД -> ненужная нагрузка на хостинг.

        • Если уж нужно это делать так рано, то лучше это делать в wp-config.php прямо перед последним include/require, а не в index.php. Таким образом ваши изменения хотя бы затираться не будут после обновления. Если нужно еще раньше, то лучше файл конфигурации веб-сервера.

          А если можно отложить на по-позже, то можно использовать дропины wp-content/sunrise.php или wp-content/advanced-cache.php. Еще позднее — событие muplugins_loaded в wp-content/mu-plugins/

          А если у вас 404-е ошибки нагружают БД, то у вас наверняка какой-нибудь дырявый плагин, дырявый хостинг или может быть вас просто досят. В любом случае проблему нужно решать на уровне firewall сервера, подсети или дата-центра.

          • Ivan Panfilov

            круто
            спасибо

  • Nikita

    А сильно грузят систему такого рода плагины? Как лучше решить вопрос с точки зрения производительности?

    • При правильной конфигурации кэширования страниц в WordPress, такой плагин никак не влияет на производительность.

  • Сергей

    А после того, как все необходимые редиректы сделаны, и больше не предвидится, можно удалять этот плагин, или без него редиректы потеряются?

  • Алексей

    подскажите, как сделать редирект, чтобы страница не вылетала из индекса?

  • Yura

    а как зделать правильно перенаправление в плагине, в функции, которая получила форму от пользователя? wp_redirect() не фурычит из-за того, что был уже отпрален «заголовок»

  • Спасибо! Очень удобно, что основные варианты редиректа в одном месте собраны