Вопрос или проблема
Необходимо, чтобы определенная страница открывалась по новому URL.
Вот URL:
https://example.com/my-page
открылся по этому URL:
https://example.com/1
Я пишу самый простой код перенаправления:
add_action( 'init', 's4132_pages_rewrite' );
function s4132_pages_rewrite() {
add_rewrite_rule(
'^1$',
'index.php?post_type=page&name=my-page',
'top'
);
}
add_filter( 'post_type_link', 's4132_pages_permalink', 10, 4 );
function s4132_pages_permalink( $post_link , $post , $leavename , $sample ) {
if ( $post->post_type === 'page' ) {
if ( $post->post_name === 'my-page' ) {
return home_url( '1' );
}
}
return $post_link;
}
Само перенаправление срабатывает, страница открывается, но в строке браузера новый URL заменяется на старый.
Как это исправить?
Ответ или решение
Почему происходит возврат к старому URL?
При анализе вашей проблемы видно, что вы пытаетесь перенаправить старый URL страницы (https://example.com/my-page) на новый (https://example.com/1). Несмотря на то, что перенаправление работает и страница загружается по новому адресу, браузер при этом отображает старый URL. Причина этого поведения заключается в особенностях механизма перенаправлений и использовании функции WordPress.
1. Тип редиректа
Существует несколько типов редиректов (301, 302 и т.д.), и, в зависимости от того, какой из них используется, поведение браузера может отличаться. Если вы хотите, чтобы браузер действительно обновил адрес в строке адреса, необходимо использовать редирект типа 301 (постоянный редирект). В текущем коде не реализуется механизм отправки заголовка HTTP для редиректа, что и приводит к отображению старого URL.
2. Код редиректа
Для того чтобы исправить ситуацию, вам нужно добавить соответствующий редирект в код:
add_action('template_redirect', 's4132_redirect_old_url');
function s4132_redirect_old_url() {
if (is_page('my-page')) {
wp_redirect('https://example.com/1', 301);
exit;
}
}
Этот код будет проверять, если пользователь пытается открыть страницу “my-page”, и отправлять его на новый URL с кодом ответа 301. После выполнения редиректа важно вызвать exit
, чтобы остановить выполнение скриптов WordPress на текущей странице.
3. Кэширование
Другой причиной, почему старый URL отображается в строке браузера, может быть кэширование. Если используете кэш-плагины или на сервере активированы какие-либо механизмы кэширования, они могут хранить старые версии страниц, что приведет к неправильному отображению. Рекомендуется очистить кэш после внесения изменений.
4. Другие аспекты SEO
Важно помнить, что постоянные редиректы (301) не только помогают корректно обновить URL в браузере, но также сообщают поисковым системам (таким как Google), что старая страница была перемещена на новый адрес. Это критически важно для сохранения SEO-рейтинга вашего сайта.
5. Подытожим
Для исправления ситуации с отображением старого URL в браузере, необходимо:
- Внедрить код редиректа 301 так, чтобы он выполнялся на уровне шаблона.
- Очистить кэш вашего сайта (если используется).
- Убедиться в правильной конфигурации редиректов во всех используемых плагинах и на веб-сервере.
Следуя этим шагам, вы сможете не только эффективно перенаправить пользователей на новый URL, но и улучшить общую SEO-оптимизацию вашего сайта.