Вопрос или проблема
Я сменил сервер с apache на nginx. Все URL-адреса страниц PHP с аргументами работают. Но один конкретный файл PHP не работает.
Я попытался переписать один из файлов PHP article.php, как указано в коде ниже в блоке сервера.
location = /article.php
{
rewrite article.php?category=$1&id=$2&engtitle=$3 ^article/(.*)/([^-]*)-(.*).html break;
}
Если я пытаюсь открыть URL http://domainname.com/article.php?category=sports&id=4&engtitle=titlehere в браузере, он переписывается на SEO URL страницы. Но я получаю 404 not found/nginx страницу.
Даже если я пытаюсь закомментировать код переписывания, он перенаправляет на SEO URL и показывает страницу 404 not found/nginx.
Как это решить.
Я получаю страницу 404 not found на nginx.
Ответ или решение
Ситуация, с которой вы столкнулись, может быть довольно распространенной при переходе с Apache на Nginx, так как конфигурация веб-сервера и обработка PHP-запросов могут существенно различаться. Рассмотрим подробно вашу проблему с неработающим файлом article.php
и возможные пути её решения.
1. Анализ конфигурации
Ваше текущее правило перезаписи:
location = /article.php {
rewrite article.php?category=$1&id=$2&engtitle=$3 ^article/(.*)/([^-]*)-(.*).html break;
}
Сначала стоит отметить, что данное правило написано с ошибками, поэтому давайте его разберем.
- Параметры
$1
,$2
и$3
не могут быть корректно извлечены из данной конфигурации, так как это правило перезаписи на самом деле не соответствует никакому регулярному выражению в вашем Nginx.
Для более корректного подхода вам потребуется использовать try_files
вместо rewrite
, если вы хотите, чтобы Nginx
сначала попытался найти файл, а затем в случае неудачи использовал правило перезаписи. Пример:
location /article {
try_files $uri $uri/ /article.php?$args;
}
2. Направление PHP-запросов
Ваша конфигурация также должна включать блок для обработки запросов к PHP, чтобы Nginx
мог правильно обрабатывать файл article.php
. Обычно это выглядит так:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000; # или unix:/var/run/php/php7.4-fpm.sock
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Убедитесь, что конфигурация FastCGI правильно настроена и что файл article.php
физически существует в указанной директории, на которую ссылается $document_root
.
3. Логи ошибок
Кроме изменений в конфигурации, стоит обработать ошибки. Зайдите в логи ошибок вашего Nginx. По умолчанию они могут находиться по пути /var/log/nginx/error.log
. Ошибки, указанные в этом файле, могут дать вам больше информации о том, почему вы получаете 404 ошибку.
tail -f /var/log/nginx/error.log
4. Проверка прав доступа
Важно также проверить права доступа к файлу article.php
. Убедитесь, что Nginx
имеет необходимые права для чтения этого файла и его директорий.
ls -l /path/to/your/article.php
Права должны быть как минимум 644
для файла и 755
для каталога, в котором он находится.
5. Проверка конфигурации Nginx
После внесения изменений в конфигурацию не забудьте проверить конфигурацию с помощью команды:
nginx -t
И перезагрузить Nginx:
systemctl reload nginx
Выводы
Проблемы с доступом к конкретному PHP-файлу в Nginx могут быть вызваны неполной конфигурацией серверного блока, проблемами с FastCGI, правами доступа или неправильной настройкой URL-правил. Следуя указанным шагам, вы сможете диагностировать и устранить проблему с 404 ошибками для вашего файла article.php
.
Если локализация проблемы требует дополнительных шагов, не стесняйтесь уточнить детали, и мы сможем рассмотреть их более глубоко.