Вопрос или проблема
У нас есть сайт на 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-индикаторами, поскольку неправильная конфигурация перенаправлений может повлиять на видимость сайта в поисковых системах. Убедитесь, что ваш сайт остается доступным как для пользователей, так и для поисковых роботов, сохраняя целостность вашего контента на обоих доменах.
Следуя описанным шагам, вы сможете успешно настроить перенаправление постов на поддомен, не затрагивая страницы на основном домене.