Nginx 下载特定的 PHP 文件而不是执行

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 文件位置块(因为它们最长),但不知何故这不起作用。

我可以找到很多类似的问题,但遗憾的是没有一个真正帮助我

如能得到任何指导我将非常感激,如果有具体的阅读材料我可以真正了解哪里出了问题那就更好了。

相关内容