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

Nginx загружает определенный файл PHP вместо выполнения

Я переместил небольшую связку скриптов с Apache на Nginx. Это каталог, полный файлов, где определенные расширения (php, txt, js, html) должны отображаться в одном скрипте, другие файлы должны быть загружены, а каталоги должны быть доступны для просмотра. Отметим, что в настоящее время gallery.php не используется. Все это работало с htaccess ниже:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !prettify.php
RewriteCond %{REQUEST_FILENAME} !index.php
RewriteCond %{REQUEST_FILENAME} !upload.php
RewriteCond %{REQUEST_FILENAME} !gallery.php
RewriteRule ^(.*\.(php|txt|js|html)) prettify.php?f=$1 [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/$ index.php?dir=$1 [L,QSA]

RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3
php_flag engine off

Попробовав кучу вещей, я остановился на этой конфигурации nginx, которая позволяет мне видеть основной каталог через index.php:

server {
    client_max_body_size 8M;
    listen 80;
    listen [::]:80;

    server_name paste.<host>;

    error_log /vmdata/services/web/logs/paste.error.log;
    access_log /vmdata/services/web/logs/paste.access.log;

    root /vmdata/services/web/vhosts/paste;
    index index.php;

    location /index.php {
        fastcgi_pass php_php73-fpm:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location /prettify.php {
        fastcgi_pass php_php73-fpm:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location /upload.php {
        fastcgi_pass php_php73-fpm:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location /gallery.php {
        fastcgi_pass php_php73-fpm:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    location ~* ^(.*\.(php|txt|js|html))$ {
        try_files prettify.php?f=$1;
    }

    location ~* ^(.*)/$ {
        try_files index.php?dir=$1;
    }

    location / {
        try_files $uri $uri/ /index.php?dir=$1;
    }
}

Файлы загружаются нормально, но файлы, соответствующие блоку местоположения для определенных расширений, начинают загрузку, содержащую источник prettify.php. Каталоги не попадают в index.php, а просто вызывают ошибку 404.

Что я здесь делаю не так? Насколько я понимаю, сначала должны быть выполнены 4 конкретных блока местоположения файла PHP (поскольку они самые длинные), но почему-то это не работает.

Я мог найти много похожих вопросов, но, к сожалению, ни один мне не помог

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