您现在的位置:爱折腾>> Linux>>正文内容

配置修改Nginx支持ThinkPHP的PATHINFO

  ThinkPHP支持通过PATHI*O和URL rewrite的方式来提供友好的URL,只需要在配置文件中设置 'URL_MODEL' => 2 即可。在Apache下只需要开启mod_rewrite模块就可以正常访问了,但是Nginx中默认是不支持PATHI*O的,所以我们需要修改nginx.conf文件。

  网上搜了很多方法都不奏效,研究了一天,发现通过以下的配置可以完美支持 'URL_MODEL' => 2 的情况了 

  1. location /project/ {  
  2.     *  *.php;  
  3.     if (!-e $request_filename) {   
  4.        rewrite  ^/project/(.*)$  /project/*.php/$1  last;  
  5.         break;  
  6.     }  
  7. }  
  8.  
  9. location ~ .+\.php($|/) {  
  10.     set $script    $uri;  
  11.     set $path_info  "/";  
  12.      if ($uri ~ "^(.+\.php)(/.+)") {  
  13.         set $script     $1;  
  14.         set $path_info  $2;  
  15.      }  
  16.            
  17.    *cgi_pass 127.0.0.1:9000;  
  18.    *cgi_*  *.php?IF_REWRITE=1;  
  19.     include /APMServ/nginx/conf/*cgi_params;  
  20.     *cgi_param PATH_I*O $path_info;  
  21.    *cgi_param SCRIPT_FILENAME  $document_root/$script;  
  22.     *cgi_param SCRIPT_NAME $script;  

  

这里先把project下的请求都转发到*.php来处理,亦即ThinkPHP的单一入口文件;然后把对php文件的请求交给*cgi来处理,并且添加对PATH_I*O的支持。

  重启Nginx以后,http://localhost/project/Index/insert, http://localhost/project/*.php/Index/delete 这样的URL都可以正确访问了。

  还有一个地方需要注意的是,Nginx配置文件里 if 和后面的括号之间要有一个空格,不然会报unknown directive错误。

相关文章