Как сменить структуру постоянных ссылок в WordPress на Ubuntu
Кратко: установите и настройте плагин Permalinks Migration в админке WordPress, затем включите mod_rewrite и разрешите переопределение конфигурации Apache (AllowOverride). Проверьте наличие и содержимое .htaccess и перезапустите Apache. Если есть ошибки — проверьте логи и права на запись в корне сайта.
Зачем менять структуру постоянных ссылок
Читабельные URL помогают пользователям и поисковым системам. По умолчанию WordPress использует формат ?p=123 — он неинформативен и плохо влияет на UX и некоторые SEO-метрики. Переход на человекопонятные пермалинки (например: /nazvanie-posta-123.html) требует корректной перенаправляющей логики, чтобы старые ссылки не возвращали 404.
Короткая терминология
- Permalink — постоянная ссылка на запись.
- 301 — постоянное перенаправление (HTTP 301 Moved Permanently).
- mod_rewrite — модуль Apache для правил переадресации и переписывания URL.
Подготовка в WordPress (плагин Permalinks Migration)
- Установите и активируйте плагин Permalinks Migration.
- В админке перейдите: Панель администратора → Параметры → PermalinksMigration и укажите старую структуру ссылок. Если у вас был формат по умолчанию, укажите /%post_id%/.
- Перейдите: Панель администратора → Параметры → Постоянные ссылки и выберите новую структуру, например /%postname%-%post_id%.html/ или любую другую, которая вам подходит.
Важно: пока Apache не настроен на переписывание URL, старые записи будут возвращать 404 — это нормальная стадия до настройки сервера.
Настройка Apache на Ubuntu (включение mod_rewrite и AllowOverride)
Следующие шаги выполняются в терминале под пользователем с правами sudo:
- Поиск модуля mod_rewrite (опционально):
sudo locate mod_rewrite.soОбычно файл находится в /usr/lib/apache2/modules.
- Вариант A — включить модуль стандартным способом (рекомендуется на Ubuntu):
sudo a2enmod rewrite- Вариант B — если вы предпочитаете ручную загрузку модуля, можно создать или отредактировать файл:
cd /etc/apache2/mods-enabled
sudo touch rewrite.load
sudo gedit rewrite.loadВставьте в файл строку:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so- Разрешение перезаписи (AllowOverride). Откройте конфигурацию сайта. На современных системах это может быть /etc/apache2/apache2.conf или файл в /etc/apache2/sites-available/ (например 000-default.conf или default). Найдите секцию для вашего каталога (обычно /var/www/ или DocumentRoot). Если вы видите строки вроде:
Options Indexes FollowSymLinks MultiViews
AllowOverride Noneизмените AllowOverride None на:
AllowOverride all- Перезапустите Apache:
sudo systemctl restart apache2# или, на старых системах
sudo /etc/init.d/apache2 restartВажно: изменения могут быть в разных файлах конфигурации в зависимости от версии Ubuntu и структуры виртуальных хостов. Проверьте, что вы правите конфиг, который реально используется сервером.
Проверьте файл .htaccess
WordPress обычно записывает правила в файл .htaccess в корне сайта. Убедитесь, что этот файл существует и доступен для записи (хотя бы временно). Пример стандартного содержимого .htaccess для WordPress:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPressЕсли файла нет, создайте его и вставьте правила выше. Проверьте права доступа (владелец и режим), например web-server: www-data.
Тесты и критерии приёмки
- Тест 1 — старый URL должен возвращать 301 и вести на новый URL:
curl -I https://example.com/?p=123Ожидаемо: в ответе HTTP-статус 301 и заголовок Location с новым адресом.
Тест 2 — откройте старую ссылку в браузере — должна произойти перенаправление без 404.
Тест 3 — проверьте логи Apache (error.log и access.log) для выявления ошибок переписывания.
Критерии приёмки
- Все ранее опубликованные записи не возвращают 404 и корректно перенаправляются на новую структуру (301).
- .htaccess содержит правила WordPress и сервер использует их (AllowOverride разрешён).
Отладка: что делать, если не работает
- Убедитесь, что mod_rewrite включён: выполните sudo a2enmod rewrite и перезапустите Apache.
- Проверьте, что вы редактируете тот файл конфигурации, который активен для вашего виртуального хоста.
- Проверьте права .htaccess: владелец должен быть пользователь, под которым работает Apache (обычно www-data), и файл должен быть читаем.
- Просмотрите логи:
sudo tail -n 200 /var/log/apache2/error.log
sudo tail -n 200 /var/log/apache2/access.logЕсли плагин Permalinks Migration не создаёт перенаправления — попробуйте временно отключить другие плагины, которые могут вмешиваться в перезапись URL.
Альтернатива: если плагин продолжает давать сбой, можно реализовать правила перенаправления вручную через .htaccess, но это требует знания регулярных выражений и структуры старых/новых URL.
Быстрый чек-лист для администратора
- Резервная копия файлов сайта и базы данных.
- Установлен и активирован Permalinks Migration.
- Указана старая структура ссылок в настройках плагина.
- Изменена новая структура в Настройки → Постоянные ссылки.
- Включён mod_rewrite (a2enmod rewrite).
- AllowOverride изменён на all для нужного каталога.
- .htaccess присутствует и содержит правила WordPress.
- Apache перезапущен и перенаправления работают (тест curl).
Резервный план и откат
Если что-то пойдёт не так:
- Верните прежнюю структуру в админке WordPress.
- Восстановите из резервной копии файлы конфигурации Apache и .htaccess.
- Верните права и владельца файлов, если меняли.
- Отключите новый плагин и проверьте поведение сайта.
Когда не стоит менять структуру
- Если сайт имеет тысячи внешних ссылок и нет возможности правильно настроить перенаправления — смена может сильно повредить трафику.
- Если вы не можете обеспечить корректные 301-редиректы для старых URL.
Короткое резюме
Переход на новую структуру постоянных ссылок в WordPress на Ubuntu — это сочетание настроек в админке (Permalinks Migration + новая схема) и конфигурации Apache (включённый mod_rewrite и AllowOverride all). Проведите тесты, убедитесь в наличии .htaccess с правильными правилами и имейте резервную копию перед изменениями.
Если после всех шагов остаются ошибки — пришлите выводы curl и последние строки из логов Apache, и я помогу с диагностикой.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента