原 nginx的pathinfo配置

前言:

        首先,什么是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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏happyJared

Linux私房菜:文件目录权限那点事

共有十个位,注意到第一个字符为[-],表示文件;常见的还有d,代表目录(directory);l,表示连接档(link)

9920
来自专栏精讲JAVA

web.xml 组件加载顺序

在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前。

12340
来自专栏精讲JAVA

web.xml 组件加载顺序

在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前。

12950
来自专栏学习力

《Java从入门到放弃》框架入门篇:Struts2的基本访问方式(二)

17440
来自专栏日常分享

JSP/Servlet Web 学习笔记 DayThree

  使用JSP语法可以存取这些内置对象来执行JSP网页的Servlet环境相互作用。内置对象其实是由特定的Java类所产生的。每一种内置对象都映射到一个特定的J...

11320
来自专栏芋道源码1024

Nginx基础——Rewrite规则

rewrite是nginx一个特别重要的指令,该指令可以使用正则表达式改写URI。可以指定一个或多个rewrite指令,按顺序匹配。

11610
来自专栏漏斗社区

代码审计| WebGoat源码审计之XXE注入

54380
来自专栏Python

linux每日命令(15):tail命令

tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里...

11410
来自专栏容器云生态

shell基本命令

有关文件显示的命令: du --exclude=iso  -sh  .        //统计当前除了iso这个目录的其他文件大小 ls -F        ...

24670
来自专栏跟着阿笨一起玩NET

AJAX顺序输出

转载:http://www.cnblogs.com/niunan/archive/2010/10/13/1849873.html

10310

扫码关注云+社区

领取腾讯云代金券