Почему не работает WordPress + Nginx?
Имею такой конфиг nginx
server { listen 80; listen [::]:80; root /var/www/wp-api; set $php_sock unix:/var/run/php/php8.1-fpm.sock; index index.php; server_name wp.domain.ru www.wp.domain.ru; access_log /var/www/site.ru/logs/wp1.access.log; error_log /var/www/site.ru/logs/wp1.error.log; location / { try_files $uri $uri/ =404 /index.php?$args; } location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass $php_sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_read_timeout 300; fastcgi_send_timeout 300; fastcgi_buffers 16 32k; fastcgi_buffer_size 64k; fastcgi_busy_buffers_size 64k; } } |
server { listen 80; listen [::]:80; root /var/www/wp-api; set $php_sock unix:/var/run/php/php8.1-fpm.sock; index index.php; server_name wp.domain.ru www.wp.domain.ru; access_log /var/www/site.ru/logs/wp1.access.log; error_log /var/www/site.ru/logs/wp1.error.log; location / { try_files $uri $uri/ =404 /index.php?$args; } location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass $php_sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_read_timeout 300; fastcgi_send_timeout 300; fastcgi_buffers 16 32k; fastcgi_buffer_size 64k; fastcgi_busy_buffers_size 64k; } }
При этом не работают ссылки, по любому адресу открывается главная страница.
Так же не работает 404, пробовал разные конфиги, результат один.
Дополнительные вопросы
Почему не работает Wordpress + Nginx?
потому что не искали и не читали,(пример)
Refguser @Refguser Делаю ИМ и другие решения
При этом не работают ссылки, по любому адресу открывается главная страница.
Потому что не прописаны правила для ЧПУ
try_files $uri $uri/ /index.php?$args;.
После изменений перезапустить сервис и обновить пермалинки в ВП.
- Действительно, вся проблема была в пермалинках. Большое спасибо!
Ответы на вопрос 0
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для WordPress на nginx все красивые URL должны попадать в
index.php, если физического файла или папки по такому пути нет. В вашем варианте проблема в логикеtry_files: вставка=404перед/index.php?$argsзавершает обработку раньше, чем запрос дойдёт до WordPress. Поэтому ЧПУ, REST API и 404 могут вести себя неправильно.Минимальный рабочий блок для WordPress:
location / { try_files $uri $uri/ /index.php?$args; }
Блок PHP можно оставить стандартным, главное чтобы
SCRIPT_FILENAMEуказывал на реальный файл и сокет php-fpm совпадал с установленной версией PHP:location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
После изменения конфигурации проверьте синтаксис и перезагрузите nginx:
nginx -t systemctl reload nginxnginx -t systemctl reload nginx
Затем в админке WordPress откройте
Настройки → Постоянные ссылкии просто сохраните текущую структуру. Это обновит rewrite-правила WordPress. Если после этого любой несуществующий URL всё равно показывает главную, проверьте уже не nginx, а тему/плагины: иногда шаблон или SEO-плагин перехватывает 404 и делает редирект на главную./wp-admin/должен открываться напрямую./wp-json/должен отдавать REST API, а не главную страницу.Итог: для ЧПУ нужен
try_files $uri $uri/ /index.php?$args;без промежуточного=404, плюс сохранение постоянных ссылок в WordPress после правки.