Вопрос или проблема
Последняя версия 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 может быть связана с неправильной конфигурацией. Давайте рассмотрим ваш конфигурационный файл и предложим решения.
Проблемы в конфигурации
-
Отсутствие директивы
try_files
вlocation ~ \.php$
:- Ваша конфигурация
location ~ \.php$
должна быть изменена, чтобы избежать 404 ошибок при обращении к PHP-скриптам. Необходимо убедиться, что PHP-скрипты обрабатываются правильно.
- Ваша конфигурация
-
Директивы
root
:- У вас две директивы
root
в секцииlocation /
, которые могут конфликтовать. Убедитесь, что они конфигурируются одинаково для упрощения отладки.
- У вас две директивы
-
Отсутствие поддержки 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;
}
}
Объяснения исправлений:
-
Параметр
SCRIPT_FILENAME
:- Эта строка гарантирует, что Nginx передаст правильный путь к PHP-скрипту. Это критично для работы WordPress.
-
Объединение директив:
- Убедитесь, что у вас нет конфликтов в директивах
root
. Храните одну основную, чтобы избежать путаницы.
- Убедитесь, что у вас нет конфликтов в директивах
-
Обработка статических файлов:
- Добавлен обработчик для статических файлов, чтобы улучшить производительность и снижения нагрузок на сервер.
Дополнительные рекомендации
- Проверьте настройки пермалинков в админке WordPress: убедитесь, что для вашего сайта выбраны правильные настройки.
- Очистка кэша и браузера: время от времени проблемы могут возникать из-за кэша. Пожалуйста, очистите кэш вашего браузера и, если вы используете плагины кэширования в WordPress, очистите их также.
- Логи Nginx: посмотрите логи (access.log и error.log), чтобы увидеть, какие ошибки возникают при запросах. Это может помочь в диагностике проблемы.
С этими изменениями ваши ссылки на статьи WordPress должны начать работать корректно. Если у вас будут дополнительные вопросы, пожалуйста, обращайтесь!