THINKPHP的NGINX rewrite的两种配置

一、普通方式

server {
 ...
    location / {
        index  index.htm index.html index.php;
        #访问路径的文件不存在则重写URL转交给ThinkPHP处理
        if (!-e $request_filename) {
           rewrite  ^/(.*)$  /index.php/$1  last;
           break;
        }
    }
    location ~ \.php/?.*$ {
        root        /var/www/html/website;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        #加载Nginx默认"服务器环境变量"配置
        include        fastcgi.conf;

        #设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
        set $fastcgi_script_name2 $fastcgi_script_name;
        if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
            set $fastcgi_script_name2 $1;
            set $path_info $2;
        }
        fastcgi_param   PATH_INFO $path_info;
        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name2;
        fastcgi_param   SCRIPT_NAME   $fastcgi_script_name2;
    }
}

二、其实应该使用更简单的方法,fastcgi模块自带了一个fastcgi_split_path_info指令专门用来解决此类问题的,该指令会根据给定的正则表达式来分隔URL,从而提取出脚本名和path info信息,使用这个指令可以避免使用if语句,配置更简单。另外判断文件是否存在也有更简单的方法,使用try_files指令即可。
server {
 ...
    location / {
        index  index.htm index.html index.php;
        #如果文件不存在则尝试TP解析
        try_files  $uri  /index.php$uri;
    }
    location ~ .+\.php($|/) {
        root        /var/www/html/website;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;

        #设置PATH_INFO,注意fastcgi_split_path_info已经自动改写了fastcgi_script_name变量,
        #后面不需要再改写SCRIPT_FILENAME,SCRIPT_NAME环境变量,所以必须在加载fastcgi.conf之前设置
        fastcgi_split_path_info  ^(.+\.php)(/.*)$;
        fastcgi_param  PATH_INFO $fastcgi_path_info;

        #加载Nginx默认"服务器环境变量"配置
        include        fastcgi.conf;
    }
}

http://m.blog.csdn.net/article/details?id=18033573
时间: 2024-07-30 11:12:51

THINKPHP的NGINX rewrite的两种配置的相关文章

FastCGI特点原理、nginx与php-fpm两种通信方式对比

kankacan一.FastCGI特点: 1.HTTP服务器和动态脚本语言间通信的接口或工具 2.可把动态语言解析和HTTP服务器分离I 3.Nginx.Apache.Lighttpd,以及多数动态语言 都支持FastCGI 4.FastCGI接口方式采用 C/S结构,分为客户端(HTTP服务器)和服务器端(动态语言解析服务器) 5.PHP动态语言服务器可以启动多个FastCGI的守护进程(例如php-fpm(fcgi process mangement)) 6.HTTP服务器通过 FastCG

Nginx安装的两种方法

Nginx安装的两种方法 方法一:通过操作系统的包管理器进行安装. centos操作系统,自带的包管理器就是yum,配置yum源,通过yum源安装nginx的方法很简单,这就是方法一的优点:方法一的缺点就是,我们安装nginx时,无法定义安装哪些模块.这里我们解释一下模块的概念,nginx的结构是高度的模块话的,不同的模块拥有不同的功能,所以,我们想要在使用nginx的时候可以使用某些特定的功能就必须安装对应的模块.不过,yum安装的nginx,包含了常用的基本模块,不需要我们安装模块.方法二与

SpringMVC两种配置理解----web.xml还有JavaConfig

最近因为在上javaEE的课程一直在学习Spring,在网上找了很多资料,发现大多数都是通过web.xml配置的spring,而通过javaConfig配置的比较少,本人自己尝试了两种配置方法. 开发环境Eclipse+Maven+Tomcat ----------------------------------------------------------- 首先我们要清楚Spring整个工作过程---> 盗用Spring in Action里的这张图片,我们可以看到整个流程:(如果想全面了

Hibernate实现有两种配置,xml配置与注释配置

hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "ht

nginx的两种配置用户权限访问

linux中生成密码文件的命令一般有两种 opensslpasswd -crypt passwd之后会生成一个字符串,文件不需要 另一种是 htpasswd -c /etc/filename.db  username 这时候会显示用户名输入密码: 当系统显示没有htpasswd命令的时候可以在输入htpasswd后系统显示安装的软件(ubuntu) 最后贴出我自己的nginx的配置作为参考: server { listen       9200; server_name   xxxxxxxx;

thinkphp的钩子的两种配置和两种调用方法

thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp的核心文件中模仿核心行为类添加了另一个行为类,下面是截图: 我的虚拟主机配置文件夹是D:/

Nginx入门之两种handler函数的挂载方式

请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 接着上次的文章,今天研究<深入理解Nginx模块开发与架构解析>一书中给出的mytest的例子,发现和 /tengine.taobao.org/book/一书中的例子不甚相同,尤其是在handler函数的挂在方面. 函数的挂载分为两种方式: 一种方式就是按处理阶段挂载;另外一种挂载方式就是按需挂载.tengine.taobao.org 中使用的挂载方式是按处理阶段挂载,而深入理解一书中的挂载方式是按需求挂载. 首先看/tengin

servlet的两种配置方式

在Servlet2.5规范之前,JavaWeb应用的绝大部分组件都通过web.xml文件来配置管理,Servlet3.0规范可通过Annotation来配置管理Web组件,因此web.xml文件可以变得更加简洁,这也是Servlet3.0的重要简化. 两种方式 (1),通过web.xml配置 [html] view plain copy      <servlet>           <servlet-name>GetApplication</servlet-name>

visualvm远程监控jvm两种配置方法

参考:http://blog.itpub.net/17203031/viewspace-765810 一.Jstatd RMI远程监控方法 VisualVM在监控本地JVM的时候是很方便的.只要应用程序运行起来,我们就可以从VisualVM里面监控出来. 远程服务器上的JVM监控就需要一些额外的配置了.目前VisualVM支持两种监控方法:Jstatd方法和基于JMX的方法.我们先介绍Jstatd方法. Jstatd方法是利用后台的RMI守护进程来实现对远程JVM的监控. 1.查看一下JAVA_