文档章节

nginx的pathinfo配置

dingdayu
 dingdayu
发布于 2016/04/21 11:02
字数 700
阅读 108
收藏 2
点赞 1
评论 0

前言:

        首先,什么是pathinfo模式呢?

        pathinfo是伪静态的一种,我们先解释一下伪静态的概念,伪静态页面是静态URL与动态URL互通的一个桥梁,它是指动态网址通过URL重写的手段去掉其动态参数,使URL静态化,但在实际的网页目录中并没有重写URL。简单来说,伪静态URL就是通过服务器转换伪装文件名或地址,使该页面类似于静态页面,但服务器上没有独立存在的文件,其本质还是动态页面。

       例如:一个动态网址http://www.cxzaixian.com/index.php?m=topic&a=detail&tid=82  转为 伪静态模式后为http://www.cxzaixian.com/index.php/topic/detail/tid/82.html。 

       apache服务器本身是支持pathinfo的,通过简单修改几项配置即可。当配置支持pathinfo后,在php应用程序中,通过_SERVER['PATH_INFO']变量获取pathinfo值为/topic/detail/tid/82.html。 我们就可以很容易通过php逻辑代码来解析出controller文件、action方法、以及剩余的动态参数,进而就可以返回正确的网页响应。

       但是我们要说的nginx服务器默认是不支持pathinfo模式访问。实质上就是nginx不会去设置环境变量PATH_INFO 的值,导致php应用程序不能通过_SERVER['PAHT_INFO']来获取path_info, 也就不能解析出对应的动态参数。

       好了,终于到本文的正题了,nginx支持pathinfo的配置如下:    

一、修改ngingx的配置文件nginx.conf


在server里的location项:

修改前:

#注:去掉下行的$ 字符
location ~ \.php$ { 
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
    #注:下面加上一些配置语句
}

修改后:

location ~ \.php {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
    #定义变量 $path_info ,用于存放pathinfo信息
    set $path_info "";
    #定义变量 $real_script_name,用于存放真实地址
    set $real_script_name $fastcgi_script_name;
    #如果地址与引号内的正则表达式匹配
    if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
        #将文件地址赋值给变量 $real_script_name
        set $real_script_name $1;
            #将文件地址后的参数赋值给变量 $path_info
            set $path_info $2;
    }
    #配置fastcgi的一些参数
    fastcgi_param SCRIPT_NAME $real_script_name;
    fastcgi_param PATH_INFO $path_info;
}

二、重启nginx和phpcgi

© 著作权归作者所有

共有 人打赏支持
dingdayu

dingdayu

粉丝 33
博文 105
码字总数 51080
作品 3
海淀
后端工程师
nginx 隐藏 index.php 和 开启 pathinfo 模式的配置

nginx 通过 location 的规则匹配将 php 转发给 php-fpm 处理后获取结果然后返回给客户端,转发模式可以通过 unix sock 或 tcp socket 方式。百度了好多文章我是没遇到一个能完整的而且正确的...

big_cat ⋅ 2016/06/28 ⋅ 0

LNMP 配置NGINX 支持THINKPHP PATHINFO模式

在支付宝回调,和微信回调方法中。正常不支持参数中带 ?s= ,所以要开启THINKPHP 的PATHINFO模式 。 THINKPHP 官方论坛 和网络上很多NGINX配置教程不是太完善的。 我一直比较喜欢使用lnmp....

曹梦龙 ⋅ 2016/04/15 ⋅ 7

ThinkPHP5配置Nginx实现兼容pathinfo模式访问

ThinkPHP项目,当使用Apache服务器时,Apache服务器本身支持pathinfo模式,ThinkPHP的4种访问模式都没问题;当使用Nginx时,碰到问题,必须使用兼容模式访问。 查找很多文档,归纳原因及解决...

makingdifference ⋅ 05/11 ⋅ 0

修改nginx配置文件,支持php的pathinfo

配置一个虚拟虚拟主机支持php的基本配置如下: servar {...location ~ .php$ { }...} 但是这样配置,nginx是不会支持php的pathinfo的。。 所以要修改一下配置文件如下: servar {...locatio...

笑只是一种习惯 ⋅ 2013/11/30 ⋅ 0

解决阿里云 装LNMP,ThinkPHP代码出现只能访问主页,其他跳转404

pathinfo是什么: pathinfo不是nginx的功能,它是php的功能。php有两个pathinfo,一个是环境变量$SERVER['PATH_INFO'] ,另一个是函数path_info(); path_info()的功能是可以将输入的url做判断...

issac宝华 ⋅ 2016/03/19 ⋅ 0

让nginx支持thinkphp rewrite模式

Nginx环境 在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:在nginx配置文件中添加 location / { if (!-e $requestfilename) { rewrite ^(.*)$ /index.p...

野渔 ⋅ 2016/01/11 ⋅ 2

Cocolait/tk_blog

Cocolait博客 链接 博客:http://www.mgchen.com github:https://github.com/cocolait gitee:https://gitee.com/cocolait 简介 项目完全基于Thinkphp 3.2.3框架开发 使用说明 1.配置数据库...

Cocolait ⋅ 2016/11/16 ⋅ 0

在Nginx服务器上运行EaglePHP框架pathinfo配置说明

EaglePHP框架默认采用pathinfo做资源定位,所以要求$_SERVER环境变量中必须要有PATHINFO。 一般在apache或者iis下都没有什么问题,但是在nginx下需要对配置文件做一些设置才可以。 把下面的代...

maoxiaojian ⋅ 2012/08/09 ⋅ 0

nginx设置cgi.fix_pathinfo漏洞和解决方法

最近在学习nginx的配置,有一个设置需要在php.ini中把 cgi.fixpathinfo = 1 改成cgi.fixpathinfo=0, 想了解下这个参数设置的具体功能,所以百度了下,发现这里有一个PHP PATHINFO的漏洞 (详...

朽木自雕 ⋅ 2015/12/14 ⋅ 0

ubuntu LAMP 环境搭建

1.安装php7.1: 首先添加 PPA 安装成功后运行php -v查看是否安装成功,成功的话会输出类似如下信息: PHP 7.1.0beta2 (cli) ( NTS )Copyright (c) 1997-2016 The PHP GroupZend Engine v3.1....

阿泽Aze ⋅ 2017/12/27 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HiSDP —— 高效的C++软件开发平台

目前阿里集团每天有近1000PB的数据是通过LogAgent采集的,为了让LogAgent做到资源占用节省和高效采集,背后是基于HiSDP去构建的。 缘由 当决定采用C++编程语言去开发一个软件时,紧接着所面临...

阿里云云栖社区 ⋅ 22分钟前 ⋅ 0

zookeeper-3.4.12 下载与安装教程

一、zookeeper下载地址 http://mirrors.hust.edu.cn/apache/zookeeper/ 二、启动教程 把压缩包放在指定目录下 第三: 进入 conf文件夹底下 zoo_sample.cfg 文件名改成 zoo.cfg 第四步: 进入b...

泉天下 ⋅ 23分钟前 ⋅ 0

Oracle 中文日期转换

SELECT TO_date('2011年11月11日', 'yy"年"mm"月"dd"日"') FROM DUAL; 1. Oracle无法识别中文格式,所以添加双引号。 2. 后面的格式是指字符串在转换前的格式,而不是指转换后的格式。...

江戸川 ⋅ 25分钟前 ⋅ 0

MySell:API Spring Boot

起步 类目 商品 订单

BeanHo ⋅ 27分钟前 ⋅ 0

Spring方法拦截器MethodInterceptor

参考资料 1、Spring方法拦截器MethodInterceptor 2、Sharding JDBC源码分析-JdbcMethodInvocation类的作用

哎小艾 ⋅ 30分钟前 ⋅ 0

正则表达式

元字符 元字符,又叫字符集,就是用一些特殊符号表示特定种类的字符或位置。 匹配字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 匹配...

wangchen1999 ⋅ 30分钟前 ⋅ 0

数据库数据导入Elasticsearch案例分享

基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本) 1.案例对应的源码 https://gitee.com/bboss/bboss-elastic/blob/master/bboss-el...

bboss ⋅ 31分钟前 ⋅ 0

动手---sbt(2)

参考 https://blog.csdn.net/leishangwen/article/details/46225587 建立一个chisel_max目录,文件内容如后面所述,现在开始执行命令: joe@joe-Aspire-Z3730:/media/sdb4/download/scala$ c......

whoisliang ⋅ 38分钟前 ⋅ 0

纯js实现最简单的文件上传(后台使用MultipartFile)

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>XMLHttpRequest上传文件</title> <script type="text/javascript"> //图片上传 var xhr......

孟飞阳 ⋅ 43分钟前 ⋅ 0

iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码

iOS精选源码 日期时间选择器,swift Space Battle 宇宙大战 SpriteKit游戏源码 LLDebugTool - 便捷的IOS调试工具(新增截屏功能) 相机扫描or长按识别二维码、FMDB、键盘动态高度、定位等 动画...

sunnyaigd ⋅ 43分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部