torlee 发表于 2018-11-12 12:44:28

nginx配置 支持thinkphp 的URL_MODEL=1模式

  傻瓜原创,转载请表明出处,谢谢!--
  最近一个用thinkphp框架做的项目,在centos+apache下开发完成后,想转移到nginx上搭建测试环境,
  才发现nginx默认是不支持PATHINFO的,也就是说不支持TP设置URL_MODEL=1的情况,
  这时候简单的方法,让nginx迅速搭建TP的方法是,设置URL_MODEL=3,即兼容模式。
  这种情况下,有可能在你的项目中一些个别url依旧会失效,路径错误。
  要彻底解决这个问题,可以用下面这个方法:
  第一步:
  设置URL_MODEL=1;
  第二步:
  设置nginx的配置文件
  sudo vim /etc/nginx/sites-available/default(这是在ubuntu+nginx环境下的路径):

[*]  location /{// …..省略部分代码
[*]  if(!-e $request_filename){
[*]      rewrite^(.*)$/index.php?s=$1last;
[*]  break;
[*]  }
[*]  }
[*]  上面的设置Nginx的伪静态方法, 其实内部是转发到了ThinkPHP提供的兼容模式的URL,利用这种方式,可以解决不支持PATHINFO的WEB服务器环境。
  此处需要注意的是,如果你的ThinkPHP是安装在二级目录,Nginx的伪静态方法设置如下,其中youdomain是所在的目录名称。
[*]  location /youdomain/{
[*]  if(!-e $request_filename){
[*]               rewrite^/youdomain/(.*)$/youdomain/index.php?s=$1last;
[*]  }
[*]  }
[*]  有了上面的代码之后,再加上下面一段代码,

[*]  location ~ .+.php($|/) {
[*]  set $script $uri;
[*]  set $path_info "/";
[*]  if ($uri ~ "^(.+.php)(/.+)") {
[*]  set $script $1;
[*]  set $path_info $2;
[*]  }
[*]  include fastcgi_params;
[*]  fastcgi_param PATH_INFO $path_info;
[*]  fastcgi_index index.php?IF_REWRITE=1;
[*]  fastcgi_pass 127.0.0.1:9000;
[*]  fastcgi_param SCRIPT_FILENAME $document_root/$script;
[*]  fastcgi_param SCRIPT_NAME $script;
[*]  }
[*]  添加以上两段代码之后,nginx伪静态即配置完成,你可以在URL_MODEL=1的环境下使用thinkphp了,当然,别忘了重启你的nginx服务器呦!


页: [1]
查看完整版本: nginx配置 支持thinkphp 的URL_MODEL=1模式