Вопрос или проблема
У меня есть родительская страница с URL
example.com/the-boats
И затем дочерние страницы, например:
the-boats/story
the-boats/cast
the-boats/articles
и т. д...
Многие посетители вводят
example.com/boats
example.com/cast
Поэтому, когда они это делают, я хочу перенаправить их на
/the-boats
/the-boats/story
и т. д...
Я не могу понять, как это сделать. Я попробовал 3 стратегии до сих пор
function custom_rewrite_basic()
{
add_rewrite_rule('^boats/?$', 'index.php?pagename=the-boats/$matches[2]', 'top');
flush_rewrite_rules();
}
add_action('init', 'custom_rewrite_basic');
и…
add_filter('redirect_canonical', 'my_redirect_canonical', 10, 2);
function my_redirect_canonical($redirect_url, $requested_url) {
if ( $requested_url == 'https://example.com/boats') {
$redirect_url="https://example.com/the-boats";
}
return $redirect_url;
}
А также я попробовал использовать плагин Redirection.
Теперь то, что происходит в каждом случае, это то, что перенаправляет на контент
/the-boats
НО URL остается
/boats
…что не хорошо. Еще хуже, когда я ввожу
/boats/story
…он все равно перенаправляет на контент
/boats
…и еще хуже 😀 похоже, это сбивает пермалинки, так что когда я убираю любой из этого кода, мне нужно восстанавливать пермалинки, чтобы исходные ссылки, начинающиеся с ‘the-boats’, снова работали.
Я использую Yoast SEO ‘бесплатный’, если это как-то влияет на это.
Так что… что я делаю не так? Как заставить перенаправления работать правильно И чтобы URL в адресной строке отображался правильно?
Решает ли это простое правило .htaccess вашу проблему?
RewriteRule ^/boats/(.*)$ https://www.example.com/the-boats/$1 [R=301,NC,L]
.
Ответ или решение
Для решения вашей проблемы с перенаправлением URL на родительскую страницу и её дочерние страницы, следует использовать правильные методы редиректа, которые обеспечивают изменение адреса в строке браузера, а также корректную работу с умными URL-адресами. Ниже представлена последовательность действий, которые помогут вам решить эту задачу.
1. Понимание проблемы
Вы хотите перенаправить пользователей с URL, которые они вводят (например, example.com/boats
или example.com/cast
), на правильные адреса с учётом родительской страницы (example.com/the-boats
и дочерних). Однако текущие стратегии не работают так, как вам нужно, обеспечивая только отображение контента без изменения самого URL.
2. Использование .htaccess для редиректа
Вместо использования PHP-функций для перенаправления, лучше применять правила переписывания в .htaccess
файле. Это позволит сразу корректировать адрес в строке браузера. Попробуйте добавить следующие правила в ваш .htaccess
файл:
RewriteEngine On
RewriteBase /
RewriteRule ^boats$ /the-boats [R=301,L]
RewriteRule ^boats/(.*)$ /the-boats/$1 [R=301,L]
3. Пояснение правил
RewriteEngine On
: Включает модуль модификации URL.RewriteBase /
: Указывает базовый путь для всех последующих правил.RewriteRule ^boats$ /the-boats [R=301,L]
: Перенаправляет основную страницу/boats
на/the-boats
с кодом 301 (постоянное перенаправление).- *`RewriteRule ^boats/(.)$ /the-boats/$1 [R=301,L]
**: Перенаправляет любые дочерние страницы (
/boats/…) к соответствующим дочерним URL (
/the-boats/…`).
4. Обновление параметров перенаправления
Использование 301 редиректов позволяет индексацию и SEO на вашем сайте, так как они указывают поисковикам на то, что старый URL больше не существует и его содержание перемещено.
5. Важно помнить о кешировании
После изменения .htaccess, обязательно очистите кеш вашего сервера и браузера. Иногда кеширование может влиять на тестирование правил перенаправления.
6. Проверка работы редиректа
После внесения изменений, проверьте, что перенос работает правильно, вписывая в адресную строку:
example.com/boats
— должен перенаправлять наexample.com/the-boats
example.com/boats/story
— должен перенаправлять наexample.com/the-boats/story
7. Вывод
Следуя вышеупомянутым инструкциям, вы сможете эффективно перенаправить URL-адреса своих страниц так, чтобы они корректно отображались, избегая проблем с контентом и обеспечивая хорошую SEO оптимизацию вашего веб-сайта. Рекомендуется также проводить регулярные проверки на наличие различных типов ошибок, чтобы поддерживать сайт в оптимальном состоянии.