Если WordPress не сохраняет постоянные ссылки, это одна из наиболее распространенных проблем после переноса сайта, смены хостинга, установки нового плагина или изменения конфигурации веб-сервера. После нажатия кнопки «Сохранить изменения» структура URL может не изменяться, открываться ошибка 404 или настройки просто не сохраняются. В этой статье подробно рассмотрим все возможные причины проблемы и покажем, как исправить ситуацию на серверах Apache и Nginx.

Как проявляется проблема

Наиболее распространенные симптомы:
  • структура ссылок не изменяется после сохранения;
  • появляется ошибка 404 на всех страницах;
  • открывается только главная страница;
  • WordPress возвращает стандартные ссылки вида ?p=123;
  • файл .htaccess остается пустым;
  • после сохранения появляется сообщение об ошибке.

Причина №1. Нет прав на запись файла .htaccess

На Apache WordPress автоматически изменяет файл .htaccess. Если запись запрещена, структура ссылок не сохраняется. Проверьте наличие файла:
.htaccess
Если файла нет — создайте его вручную. Минимальное содержимое:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
Права доступа:
644
Владелец должен совпадать с пользователем веб-сервера.

wordpress не сохраняет постоянные ссылки

Причина №2. Модуль mod_rewrite отключен

На Apache постоянные ссылки работают через модуль Rewrite. Проверьте:
apachectl -M | grep rewrite
или
httpd -M | grep rewrite
Если модуль отсутствует:
sudo a2enmod rewrite sudo systemctl restart apache2

Причина №3. Виртуальный хост запрещает Rewrite

В конфигурации Apache должен быть разрешен Override.
<Directory /var/www/html> AllowOverride All Require all granted </Directory>
После изменения:
sudo systemctl restart apache2

Причина №4. Nginx не настроен

На Nginx файл .htaccess не используется. Необходимо добавить правило:
location / { try_files $uri $uri/ /index.php?$args; }
После изменения:
sudo nginx -t sudo systemctl reload nginx

Причина №5. Поврежден файл .htaccess

Иногда сторонние плагины записывают некорректные правила Rewrite. Удалите все содержимое файла и оставьте только стандартный блок WordPress:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress

Причина №6. Конфликт плагинов

Некоторые SEO-плагины, плагины безопасности и кеширования изменяют Rewrite Rules. Отключите все расширения:
  1. Перейдите в Плагины.
  2. Выделите все.
  3. Нажмите «Деактивировать».
  4. Попробуйте сохранить ссылки.
После этого включайте плагины по одному.

Причина №7. Конфликт темы

Некоторые темы неправильно используют Rewrite API. Переключитесь на одну из стандартных тем WordPress:
  • Twenty Twenty-One
  • Twenty Twenty-Two
  • Twenty Twenty-Three
  • Twenty Twenty-Four

Причина №8. Rewrite Rules не обновляются

Можно выполнить обновление правил программно.
flush_rewrite_rules();
Например:
add_action('init', function () { flush_rewrite_rules(); });
Важно: выполнять функцию постоянно нельзя. Используйте ее только один раз.

Как правильно обновить Rewrite Rules

register_activation_hook(__FILE__, function () { flush_rewrite_rules(); });
Или после регистрации собственного типа записи:
add_action('init', function () { register_post_type('books', [ 'public' => true, 'rewrite' => [ 'slug' => 'books' ] ]); });

Причина №9. Неверный Home URL

Проверьте настройки:
Настройки → Общие
Либо значения в базе данных:
siteurl home
Можно зафиксировать их в wp-config.php:
define('WP_HOME', 'https://example.com'); define('WP_SITEURL', 'https://example.com');

Причина №10. Ошибки после переноса сайта

После миграции рекомендуется:
  • пересохранить постоянные ссылки;
  • очистить кеш;
  • обновить Rewrite Rules;
  • проверить домен;
  • убедиться в наличии файла .htaccess.

Очистка кеша

Если используется кеширование:
  • LiteSpeed Cache;
  • WP Rocket;
  • W3 Total Cache;
  • Redis;
  • Cloudflare;
  • FastCGI Cache.
После изменения структуры ссылок очистите весь кеш.

Проверка через WP-CLI

Текущая структура:
wp option get permalink_structure
Изменить структуру:
wp rewrite structure '/%postname%/'
Обновить правила:
wp rewrite flush

Проверка базы данных

Посмотреть текущую структуру:
SELECT option_value FROM wp_options WHERE option_name='permalink_structure';

Программное изменение структуры ссылок

update_option( 'permalink_structure', '/%postname%/' ); flush_rewrite_rules();

Проверка REST API

Иногда проблемы связаны с Rewrite. Откройте:
https://site.ru/wp-json/
Если появляется ошибка 404 — проблема почти всегда заключается в настройке веб-сервера или Rewrite Rules.

Полезная последовательность диагностики

  1. Создать или проверить файл .htaccess.
  2. Убедиться, что включен mod_rewrite.
  3. Проверить AllowOverride All.
  4. Очистить кеш сайта.
  5. Отключить все плагины.
  6. Переключиться на стандартную тему.
  7. Пересохранить постоянные ссылки.
  8. Обновить Rewrite Rules.
  9. Проверить конфигурацию Nginx или Apache.
  10. Убедиться, что сайт открывается по правильному домену.
В большинстве случаев проблема, когда WordPress не сохраняет постоянные ссылки, связана с неправильной настройкой файла .htaccess, отсутствием модуля mod_rewrite, некорректной конфигурацией Nginx или конфликтами плагинов. Последовательная проверка прав доступа, настроек веб-сервера, структуры URL и очистка кеша позволяют быстро восстановить корректную работу человекопонятных ссылок. После внесения изменений всегда пересохраняйте настройки постоянных ссылок и проверяйте доступность внутренних страниц сайта.

Метки: ,