nginx默认配置文件中对php的支持是这样的:# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ \.php$ {

# root html; # html改成项目路径

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

# include fastcgi_params;

#}

nginx对php的处理原则是将匹配到的以.php结尾的文件转交给FastCGI服务进程(FastCGI是一种协议,php-fpm是实现了FastCGI协议的程序)。

但只启用这个配置是不够的,首先,他无法处理PATH_INFO信息。即在php文件中使用全局变量$_SERVER['PATH_INFO']只能得到空值。另外,他只能处理http://domain/index.php/controller/action?query_string这样的url,无法隐藏index.php。对于现在的web框架来说,将index.php文件作为php的单一入口,并在url上隐藏index.php是最基本的要求。有些框架还可能需要用到PATH_INFO来实现路由转发。

网上有好多资料讲怎么配置nginx来实现PATH_INFO支持与index.php隐藏的,但试了好多都是不完善的,要么支持了$_SERVER['PATH_INFO']但不支持隐藏index.php,要么是无法获取$_SERVER['QUERY_STRING']。就连我去年一直用到现在的配置其实也是有问题的。

今天试了好久,总算确定了一个最合理的配置:server {

listen 80;

server_name your_domain;

location / {

root your_code_path;

index index.html index.htm index.php;

# 无法找到的文件路径交给index.php处理

# $args变量表示查询字符串,将其传递给index.php,否则index.php无法获取QUERY_STRING

try_files $uri $uri/ /index.php$is_args$args;

}

# 匹配.php文件

location ~ [^/]\.php(/|$) {

# 从请求路径中匹配出$fastcgi_script_name与$fastcgi_path_info两个变量

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

# 如果.php文件不存在,返回404

if (!-f $document_root$fastcgi_script_name) {

return 404;

}

root your_code_path;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi_params;

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

fastcgi_param  PATH_INFO        $fastcgi_path_info;

}

}

当然你也可以将后面两句fastcig_param写到/etc/nginx/fastcig_params文件中。

参考:

@2020.05

DigitalOcean 出了一个可视化的 nginx 配置工具 nginxconfig.io,还是很好用的。

info index.php,真 · nginx配置php文件解析(PATH_INFO支持与index.php隐藏)相关推荐

  1. Nginx配置示例文件

    Nginx配置示例文件 nginx.conf worker_processes 8;events {worker_connections 1024; }http {include mime.types ...

  2. nginx html解析插件,nginx配置信息的解析流程

    nginx配置信息的解析流程 2011年9月9日 1,744 次浏览 请关注最新修正合订: 这一系列的文章还是在09年写的,存在电脑里很久了,现在贴出来.顺序也不记得了,看到那个就发那个吧,最近都会发 ...

  3. 解决因nginx配置导致文件上传失败的问题 The filed file exceeds its maximum permitted size of 1048576 bytes

    解决因nginx配置问题导致文件上传失败的问题 1.问题背景 2.问题截图 3.问题分析 4.问题解决(修改nginx的配置) 5.解决之后的"后遗症"(截图) 6.分析并解决&q ...

  4. nginx配置下载文件

    nginx安装及下载文件 一.安装nginx 安装依赖包 //一键安装上面四个依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl open ...

  5. nginx配置简单文件预览

    1.目的 预览图片.pdf.txt 2.配置 #搭建文件预览     server {        listen    8888;        server_name  preview.xxx.c ...

  6. Nginx 配置实现web解析php代码 过程记录

    [Nginx配置] Nginx本身不支持对php的解析,需要将php代码转发到php-fpm 进程管理器来交给php解析器解析代码. 重要的配置注意注释位置: user www www; # 用户 用 ...

  7. nginx无法访问index.html,ThinkPHP5 + nginx配置(index.php无法访问404)

    下载ThinkPHP5后,在nginx下默认无法访问index.php, 假如文件系统路径是/home/www/ 创建项目php5后欢迎页访问路径是: http://xxxxx/home/www/ph ...

  8. html页面配置xml文件路径,web.xml与index.html

    一.部署描述符 1.每个web应用程序的配置信息都保存在各自所映射的文件系统目录下的Web-INF/web.xml文件中.web.xml文件用于描述web应用程序的部署信息,因此, web.xml文件 ...

  9. nginx配置静态文件过期时间

    1. 编辑虚拟主机配置文件/usr/local/nginx/conf/vhosts/huangzhenping.conf 说明:采用location方式 1 2 3 4 5 6 7 8 9 10  l ...

  10. Windows使用Nginx配置本地文件代理(查看本地资源或图片)

    一.前言 我们在实际开发中会经常遇到把图片上传到服务器上,比如七牛云.阿里云.腾讯云一些提供服务的商家.但是我们的图片隐私也会泄露,所以我们还是上传到本地,使用Nginx来代理到我们本地图片.这样就可 ...

最新文章

  1. Typedef用法学习
  2. [30期] 第一个项目
  3. Keras方法进行词嵌入
  4. [密码学] 基础知识
  5. 分析函数RANK的使用
  6. hdu4533 威威猫系列故事——晒被子
  7. MATLAB R2020a新鲜出炉,我来替各位尝尝鲜!
  8. NAND FLASH/NOR FLASH/EMMC等存储器的比较和区别
  9. 真正零基础Python入门:手把手教你从变量和赋值语句学起
  10. (97)Verilog HDL:秒灯设计
  11. 信息化与工业化融合的内涵、层次和方向
  12. 舍弃高通?谷歌推 Tensor 自研芯片
  13. VB禁止使用 Alt-Tab 或 Ctrl-Alt-Del
  14. Explorer.exe报错故障解决一例
  15. C++ 时间差的计算方式
  16. 小米笔记本PRO BIOS忘记密码后重置教程
  17. 企业微信文件会过期吗?
  18. html5京东页面布局,京东移动端页面布局(一)
  19. Go语言 gorutine和channel协同工作经典应用案例 (Golang经典编程案例)
  20. 安卓 11 文件储存

热门文章

  1. Spring Aop技术原理分析
  2. 2019年最新资料!共7T!
  3. 关于rstudio的一些快捷键
  4. webpack4打包vue前端多页面项目
  5. 线性表的总结:顺序存储线性表的初始化,创建,插入,删除,清空,销毁等操作...
  6. [理解ASP.NET Core框架]一个五十行的控制台Web
  7. cordova android项目自定义插件及使用(二)
  8. 移动开发不能不知道的事-meta
  9. 如何区分同一Class的不同实例对象
  10. [编写高质量代码:改善java程序的151个建议]建议43 避免对象浅拷贝; 建议44:推荐使用序列化实现对象的深拷贝...