为什么我的 NGINX 正在下载文件?

为什么我的 NGINX 正在下载文件?

我已经设置了重定向,这样我就可以在没有.php扩展名的情况下提供我的 PHP 文件,但是每当我访问“干净”的 URL 时,我的浏览器都会下载该文件,这表明 NGINX 没有将其作为 PHP 文件托管。

我该如何修复这个问题(和安全漏洞)?

配置:

server {
    listen       80;
    server_name  www.example.com;
    root         /var/www/html/public;

    location / {
        try_files $uri $uri/ @extensionless-php;
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include       /etc/nginx/fastcgi_params;
        fastcgi_pass  unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location @extensionless-php {
        rewrite ^(.*)$ $1.php last;
    }
}

答案1

使用 Chrome 检查器的网络选项卡,查看此配置与正常工作的 PHP 页面的原始 HTTP 响应标头设置。您将看到Content-Type页面之间的差异。正是替代方案Content-Type导致浏览器通过下载文件而不是显示文件来做出响应

在您的@extensionless-php块中,尝试添加此内容以强制Content-Type返回标准 HTML MIME 类型:

 default_type text/html;

相关内容