WordPress и Nginx: исправление ошибки 404 при открытии любых страниц
Как настроить Nginx так, чтобы посты и страницы при включённых ЧПУ открывались корректно.
В WordPress можно использовать человеко-понятные url (ЧПУ), чтобы из адреса страниц и людям, и поисковым системам сразу становилось понятно, о чём содержимое. Например, взглянув на tx8.ru/kak-podruzhit-tt-rss-i-fail2ban/, видно, что на странице информация про настройку fail2ban. ЧПУ включаются в админке сайта, раздел «Настройки постоянных ссылок».
Так вот, любой режим именования ссылок, кроме простого (простой — это не ЧПУ), в стандартной конфигурации веб-сервера Nginx не работает. Все страницы, кроме главной, будут выдавать ошибку с кодом 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, можете начать с него.
Огромное спасибо! Долго мучился, ваше решение очень помогло!