我已经设置了重定向,这样我就可以在没有.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;