WordPress и Nginx: исправление ошибки 404 при открытии любых страниц

Как настроить Nginx так, чтобы посты и страницы при включённых ЧПУ открывались корректно.

В WordPress можно использовать человеко-понятные url (ЧПУ), чтобы из адреса страниц и людям, и поисковым системам сразу становилось понятно, о чём содержимое. Например, взглянув на tx8.ru/kak-podruzhit-tt-rss-i-fail2ban/, видно, что на странице информация про настройку fail2ban. ЧПУ включаются в админке сайта, раздел «Настройки постоянных ссылок».

Настройки постоянных ссылок в WordPress

Настройки постоянных ссылок в WordPress

Так вот, любой режим именования ссылок, кроме простого (простой — это не ЧПУ), в стандартной конфигурации веб-сервера Nginx не работает. Все страницы, кроме главной, будут выдавать ошибку с кодом 404.

Ошибка 404 - такой страницы нет

Ошибка 404 — такой страницы нет

Решение простое. Нужно настроить Nginx так, чтобы все запросы к страницам обрабатывались через index.php. Найдите файл конфигурации сайта (скорее всего, это будет nginx.conf или какой-то другой *.conf в каталоге /etc/nginx) и поищите такой блок:

location / {
try_files $uri $uri/ =404;
}

Замените его на:

location / {
try_files $uri $uri/ /index.php?q=$uri$args;
}

Строки «try_files $uri $uri/ =404;» и/или блока «location / { }»  может не быть (отсутствие второго маловероятно, без него сайт вообще не должен работать), тогда просто добавьте правильный вариант.

После перезапустите службу nginx, чтобы настройки вступили в силу, затем зайдите в админку сайта — Настройки — Постоянные ссылки и нажмите «Сохранить». Готово, страницы должны открываться корректно!

Совет: когда нужно быстро запустить сайт на WordPress с работающим ЧПУ, я использую такой шаблон:

server {
listen ip_сервера:80;
server_name доменное_имя_сайта;
root "путь_до_корневого_каталога_сайта";
index index.php;
location ~ \.php$ {
try_files $uri =404;
}
location / {
try_files $uri $uri/ /index.php?q=$uri$args;
}
}

Для работы на «постоянке» не рекомендую, так как не указано хранение логов и нет никаких настроек безопасности, но если намудрили с настройкой Nginx, можете начать с него.