один конкретный php файл не работает в nginx

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

Я сменил сервер с 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.

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

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

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