Коротко — проблема скорее всего не в WordPress, а в том как nginx / fastcgi передаёт URI в PHP при наличии не‑ASCII (кириллица). Два распространённых сценария, которые дают описанное поведение:
1) В админке slug рубрики/записи оказался не тот, какой вы вводите в браузере (WP может транслитерировать «один» → «odin») — тогда по /один/ реально ничего нет и WP даёт 404. Проверьте это первым.
2) Nginx / fastcgi не передаёт в PHP оригинальный REQUEST_URI (или декодирует/нормализует его) — при ASCII это маскируется, при кириллице WP не находит маршрут. Частая причина — использование include fastcgi_params без нужных fastcgi_param или некорректный try_files.
Что сделать и проверить (пошагово)
1) Проверка slug в базе/админке
- В админке: Рубрики → проверьте поле «Ярлык (slug)» для проблемных рубрик.
- В БД: SELECT term_id, slug, name FROM wp_terms WHERE name LIKE '%один%';
Если slug — латиница (odin), используйте этот slug в URL либо измените slug на кириллицу/нужный вариант.
2) Посмотрите, какой URI реально приходит на сервер
- Откройте access.log и посмотрите строку запроса — браузер обычно посылает процент‑кодированный URI (%D0...), это важно.
- Сделайте простую PHP‑страницу info.php с <?php var_export($_SERVER); и откройте URL с кириллицей — посмотрите REQUEST_URI, QUERY_STRING, DOCUMENT_URI и т.д.
3) Нормальная nginx‑конфигурация для WP (рекомендуемая)
В location /:
try_files $uri $uri/ /index.php$is_args$args;
В location ~ \.php$:
include fastcgi.conf; # предпочтительнее fastcgi_params
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Если у вас есть только fastcgi_params, добавьте явно:
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
Объяснение: fastcgi.conf обычно устанавливает REQUEST_URI и другие переменные корректно; fastcgi_params в дистрибутивах иногда не содержит REQUEST_URI, и тогда PHP не видит исходный (часто процент‑кодированный) URI, что ломает распознавание "pretty permalinks" при кириллице.
4) Пересброс правил пермалинков
- В админке Settings → Permalinks нажмите Save Changes (даже если конфиг не меняли) — WordPress пересоздаст правила.
5) Доп. проверки
- Попробуйте открыть URL в форме процент‑кодировки (site.ru/%D0%BE%D0%B4%D0%B8%D0%BD/...) — если так работает, значит проблема с тем, как nginx/PHP декодируют/передают URI.
- Убедитесь, что в nginx нет дополнительных location с наложением (например, если вы где‑то ещё делаете rewrite/q=).
- Проверьте плагины, которые могут управлять транслитерацией slug'ов.
Итого: сначала проверьте реально сохранённые slug'ы. Если slug'ы — кириллица, скорей всего дело в передаче REQUEST_URI в PHP; поправьте nginx (используйте fastcgi.conf или добавьте fastcgi_param REQUEST_URI $request_uri) и try_files /index.php$is_args$args. После этого перезапустите nginx и пересохраните пермалинки — должно заработать.
Если хотите, присылайте содержимое ваших location / и location ~ \.php$ блоков — посмотрю и дам конкретный патч конфигурации.