Что не так с моим Nginx конфигом? WordPress не загружает статьи с постоянными ссылками по постовым именам.

Вопрос или проблема

Последняя версия WordPress работает на Rocky 8.

При установке постоянных ссылок на имя записи статьи в формате http://www.example.com/this-is-an-article/ возвращают ошибку 404.

Вот мой конфигурационный файл Nginx:

server {

    listen       80;
    server_name  xyz.com www.example.com;
    root   /db/docroot/www.example.com;
    index index.php;

    rewrite_log on;
    access_log  /db/logs/host.access.log  main;
    error_log   /db/logs/example.debug.log debug;

location / {
    root /db/docroot/www.example.com;
    index index.php;
    try_files $uri $uri/ /index.php?$args;
 }

location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi_params;
 }

}

Ответ или решение

Проблема с загрузкой статей WordPress с произвольными permalink (в данном случае по имени поста) на вашем сервере Nginx может быть связана с неправильной конфигурацией. Давайте рассмотрим ваш конфигурационный файл и предложим решения.

Проблемы в конфигурации

  1. Отсутствие директивы try_files в location ~ \.php$:

    • Ваша конфигурация location ~ \.php$ должна быть изменена, чтобы избежать 404 ошибок при обращении к PHP-скриптам. Необходимо убедиться, что PHP-скрипты обрабатываются правильно.
  2. Директивы root:

    • У вас две директивы root в секции location /, которые могут конфликтовать. Убедитесь, что они конфигурируются одинаково для упрощения отладки.
  3. Отсутствие поддержки URL`ов:

    • По умолчанию, Nginx не знает, как обрабатывать сообщения для процессов, если не указать это явным образом в конфигурации.

Исправленный пример конфигурации

Вот исправленный вариант вашего конфигурационного файла:

server {
    listen 80;
    server_name xyz.com www.example.com;
    root /db/docroot/www.example.com;
    index index.php index.html index.htm;

    access_log /db/logs/host.access.log main;
    error_log /db/logs/example.debug.log debug;

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }

    location ~* \.(css|js|jpeg|jpg|png|gif|ico|svg)$ {
        expires max;
        log_not_found off;
    }
}

Объяснения исправлений:

  1. Параметр SCRIPT_FILENAME:

    • Эта строка гарантирует, что Nginx передаст правильный путь к PHP-скрипту. Это критично для работы WordPress.
  2. Объединение директив:

    • Убедитесь, что у вас нет конфликтов в директивах root. Храните одну основную, чтобы избежать путаницы.
  3. Обработка статических файлов:

    • Добавлен обработчик для статических файлов, чтобы улучшить производительность и снижения нагрузок на сервер.

Дополнительные рекомендации

  • Проверьте настройки пермалинков в админке WordPress: убедитесь, что для вашего сайта выбраны правильные настройки.
  • Очистка кэша и браузера: время от времени проблемы могут возникать из-за кэша. Пожалуйста, очистите кэш вашего браузера и, если вы используете плагины кэширования в WordPress, очистите их также.
  • Логи Nginx: посмотрите логи (access.log и error.log), чтобы увидеть, какие ошибки возникают при запросах. Это может помочь в диагностике проблемы.

С этими изменениями ваши ссылки на статьи WordPress должны начать работать корректно. Если у вас будут дополнительные вопросы, пожалуйста, обращайтесь!

Оцените материал
Добавить комментарий

Капча загружается...