Перенаправить посты на подсайт, кроме страниц

Вопрос или проблема

У нас есть сайт на WordPress, который содержит записи и страницы. Теперь мы переместили записи на поддомен, но страницы остались на основном домене. Только у записей есть .html расширение, и в URL для записей и страниц нет разницы.

Пример записи: www.mydomain.com/sample-posts.html необходимо перенаправить на blog.mydomain.com/sample-posts.html.

Пример страницы: www.mydomain.com/sample-pages

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

Я бы сделал это через конфигурацию сервера. Вот пример для .htaccess:

RewriteCond %{HTTP_HOST} !^blog\.example\.com$
RewriteRule (.*)\.html$ http://blog.example.com/$1.html [L,R=301]

Вы также можете сделать это в плагине WordPress. Предложение без тестирования:

add_action( 'template_redirect', 'wpse_77279_redirect' );

function wpse_77279_redirect()
{
    if ( is_single() 
        and 'blog.example.com' !== $_SERVER['HTTP_HOST'] 
        and 'post' === get_post_type() 
    )
    {
        wp_redirect( 'blog.example.com' . $_SERVER['REQUEST_URI'] );
        exit;
    }
}

.

Ответ или решение

Для решения вашей задачи по перенаправлению постов с основного домена на подконтрольный поддомен, необходимо эффективно настроить серверную конфигурацию и использовать возможности WordPress. Ниже приведены подробные инструкции и примеры, которые помогут вам выполнить это перенаправление.

1. Перенаправление с помощью .htaccess

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

Добавьте следующий код в файл .htaccess, находящийся в корне вашего сайта:

RewriteEngine On

# Проверяем, что запрашиваемый домен не являет собой поддомен
RewriteCond %{HTTP_HOST} !^blog\.mydomain\.com$ 

# Перенаправление всех постов с .html на поддомен
RewriteRule ^(.*)\.html$ http://blog.mydomain.com/$1.html [L,R=301]

Объяснение кода:

  • RewriteEngine On — включает механизм переопределения URL.
  • RewriteCond — условие, в котором проверяется, что запрашиваемый домен не является поддоменом blog.mydomain.com, чтобы избежать зацикливания при написании правил.
  • RewriteRule — задает правило перенаправления всех URL, заканчивающихся на .html, к соответствующему адресу на поддомене.

2. Перенаправление через функции WordPress

Если вы хотите управлять перенаправлениями через WordPress, это можно сделать, добавив пользовательскую функцию в файл functions.php вашей темы. Рассмотрите следующий пример:

add_action('template_redirect', 'custom_redirect_post_to_subdomain');

function custom_redirect_post_to_subdomain() {
    // Проверка, является ли текущая запись постом
    if (is_single() && 'www.mydomain.com' === $_SERVER['HTTP_HOST'] && 'post' === get_post_type()) {
        // Получаем текущий URL и формируем новый
        $new_url = 'http://blog.mydomain.com' . $_SERVER['REQUEST_URI'];
        wp_redirect($new_url, 301); // 301 — статус код постоянного перенаправления
        exit; // Завершаем выполнение скрипта
    }
}

Пояснение кода:

  • add_action('template_redirect', 'custom_redirect_post_to_subdomain') — добавляет действие для перенаправления, которое выполняется перед выводом заголовков шаблона.
  • is_single() — проверяет, является ли запрашиваемая страница отдельным постом.
  • wp_redirect() — выполняет перенаправление на новый URL с кодом 301.

Заключение

Внимательно протестируйте ваши настройки после внесения изменений, чтобы убедиться, что все перенаправления работают корректно и посты направляются на нужный поддомен. Также важно следить за SEO-индикаторами, поскольку неправильная конфигурация перенаправлений может повлиять на видимость сайта в поисковых системах. Убедитесь, что ваш сайт остается доступным как для пользователей, так и для поисковых роботов, сохраняя целостность вашего контента на обоих доменах.

Следуя описанным шагам, вы сможете успешно настроить перенаправление постов на поддомен, не затрагивая страницы на основном домене.

Оцените материал
Добавить комментарий

Капча загружается...