Короткий ответ — причина в редиректе, который инициируется WordPress (или плагином, который использует wp_redirect). Заголовок X-Redirect-By: WordPress сам по себе не гарантирует, что это «чисто» ядро: и core, и плагины обычно используют wp_redirect и дают такой же заголовок. Поэтому нужно отладить, кто именно делает редирект и почему сейчас он уводит на / вместо /russia/moscow/.
Что проверить и сделать (пошагово, от простого к более глубокому):
1) Посмотреть ответ сервера «в лоб»
- Выполните в консоли:
curl -I -L -v https://вашдомен.ru/moscow/
- Посмотрите код ответа (301/302) и цепочку редиректов. Это даст представление, на каком шаге и с каким заголовком уходит запрос.
2) Отключить плагины, которые наиболее вероятны
- Временно деактивируйте плагин 404-to-301 и проверьте поведение снова.
- Если не помогло — деактивируйте Redirection.
Часто 404-to-301 по умолчанию перенаправляет все 404 на главную (что и похоже на ваш случай).
3) Переустановите/сбросьте ЧПУ
- В админке: Настройки → Постоянные ссылки → Сохранить изменения (даже без изменения) — это сбросит rewrite-правила.
- После этого проверьте /moscow/ ещё раз.
4) Проверить наличие конфликтующих объектов с тем же slug
- В базе (wp_posts) выполните запрос: SELECT ID, post_type, post_parent, post_status FROM wp_posts WHERE post_name = 'moscow';
- Убедитесь, что нет другого поста/страницы/attachment с тем же slug, который может влиять на поиск правильного URL. Если есть attachment или черновик — это бывает причиной некорректных редиректов.
5) Логи и выяснение, кто именно делает редирект
- Добавьте временно в functions.php или mu-plugin такой код, чтобы поймать, кто вызывает redirect_canonical/редирект:
add_filter('redirect_canonical', function($redirect_url, $requested_url){
error_log("redirect_canonical: requested: $requested_url -> redirect: $redirect_url | backtrace: " . print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5), true));
return $redirect_url;
}, 10, 2);
- Или логировать все wp_redirect вызовы:
add_filter('wp_redirect', function($location, $status){
error_log("wp_redirect to $location status $status\n" . print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5), true));
return $location;
}, 10, 2);
- После этого вызовите /moscow/ и посмотрите error_log — по backtrace увидите файл/плагин, инициировавший редирект.
6) Проверить правила плагина Redirection
- В админке Redirection — есть ли правило, которое ловит /moscow/ или все 404/неизвестные и отправляет на / ?
7) Тема и functions.php
- Временно переключитесь на дефолтную тему (например Twenty Twenty-Three) — чтобы исключить кастомный код в теме, который делает редирект.
8) Кэш и CDN
- Очистите кэш сайта, плагинов и CDN (Cloudflare и т.п.). Иногда старые правила остались в кеше и ведут на главную.
Почему раньше редиректил на /russia/moscow/, а теперь на /:
- Возможные причины: обновление/настройка плагина (404-to-301 стал перенаправлять 404 на /), появление другого объекта с slug moscow, изменение правил пермалинков или сбой в lookup WP (он не нашёл страницу и плагин/настройка отправила на /).
- WP core автоматически пытается «угадывать» правильный URL (redirect_canonical/redirect_guess_404_permalink). Если угадывание не сработало, плагин 404-to-301 мог поймать 404 и отослать на /.
Если хотите, помогу точнее — пришлите:
- результат curl -I -L -v https://вашдомен.ru/moscow/
- список активных плагинов
- вывод запроса SELECT ... WHERE post_name = 'moscow' (или просто скрин/список страниц с таким slug).