一聚教程网:一个值得你收藏的教程网站

热门教程

nginx解决ThinkPHP PATHINFO不支持问题

时间:2022-06-30 18:43:06 编辑:袖梨 来源:一聚教程网

好久没写PHP,最近因为项目指定ThinkPHP于是又重温PHP狂潮,由于长期写JavaScript以至于我忘了PHP的数组竟然还可以自定义key...闹笑话了。
ThinkPHP默认不是使用PATHINFO模式,对于目前主流的流行框架,貌似PATHINFO已经成为流行,更让我意外的是ThinkPHP还能支持路由,有点类似于Python网络框架的路由了。之前在网上看不少人在nginx开启PATHINFO模式主要修改localhost \.php 里的内容,但最近发现了一条更简便的方法:

 代码如下 复制代码

location / {
   if (!-e $request_filename) {
      rewrite ^(.*)$ /index.php?s=$1 last;
      break;
   }
}

或者更高级点的

在nf文件增加如下配置

 代码如下 复制代码

if (!-e $request_filename)
  {
   rewrite  ^/(.*)index.php(.*)$  $1/index.php?s=$2  last;                                     
               break;       

}

利用了nginx的url重写机制实现了这一功能,而ThinkPHP的config.php也不需要添加:URL_MODEL => 1这个配置了。

补充:

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

 代码如下 复制代码

location /project/ {

 index index.php;

 if (!-e $request_filename) {

 rewrite ^/project/(.*)$ /project/index.php/$1 last;

 break;

 }

}

location ~ .+\.php($|/) {

 set $script $uri;

 set $path_info "/";

 if ($uri ~ "^(.+\.php)(/.+)") {

 set $script $1;

 set $path_info $2;

 }

 

 fastcgi_pass 127.0.0.1:9000;

 fastcgi_index index.php?IF_REWRITE=1;

 include /APMServ/nginx/conf/fastcgi_params;

 fastcgi_param PATH_INFO $path_info;

 fastcgi_param SCRIPT_FILENAME $document_root/$script;

 fastcgi_param SCRIPT_NAME $script;

}

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

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

热门栏目