Назад | Перейти на главную страницу

nginx не проверяет, существует ли файл перед переходом на PHP?

Я пишу веб-приложение с использованием Slim 3, и мне трудно заставить nginx нормально работать с одним из моих маршрутов.

Мое приложение позволяет пользователям загружать файлы и просматривать их, достаточно просто. Это генерирует URL-адреса типа /viewfile/{user_id}/{filename}. Когда имя файла заканчивается на .php, Я бы ожидал, что nginx try_files чтобы определить, существует ли он, прежде чем пытаться передать его в php-fpm. Однако я полагаю php блок местоположения все еще пытается использовать его как действительный файл PHP, так как я продолжаю получать php-fpm No input file specified. ошибка при попытке просмотра загруженного файла php.

Есть ли способ заставить nginx не пытаться обслуживать весь файл PHP с помощью php-fpm и вместо этого передавать его index.php как и остальные несуществующие URL-адреса, но при этом сохраняется возможность только существующий Файлы PHP для обслуживания?

Вот моя конфигурация, урезанная до соответствующих частей, если это необходимо:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    root /var/www/html/public;
    index index.php index.html index.htm;

    server_name {redacted};

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

    location ~ \.php$ {
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/run/php-fpm/php7.0-fpm.sock;
        include fastcgi_params;
    }
}