Listening to the Words

解决ubuntu下thinkphp5不支持path_info的问题

laravel下官方推荐使用homestead作为本地开发环境,homestead是一个vagrant的box,借助于vm虚拟机,搭建一个适合团队开发的统一环境.

我想这个环境可不可以作为开发thinkphp5的环境?于是试了一下,安装上了homestead,在通过composer安装了tp5的项目,然后问题出现了,网页不跳转.

路由一直卡在 /admin/index/login.html页面无法进行跳转

我以为是homestead的环境出现了问题,于是切换到laravel项目,试了下没有问题.于是谷歌下,发现是thinkphp5在nginx环境下不支持pathinfo方式解析路由导致的.

tp官方也给出了解决办法,但是我试了很多次都不起作用,最后找到了解决办法:

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

在所在vhost虚拟机配置文件中增加以上代码,其实内部是转发到了ThinkPHP提供的兼容URL,利用这种方式,可以解决其他不支持PATHINFO的WEB服务器环境。

原来的访问URL:

http://serverName/index.php/模块/控制器/操作/[参数名/参数值…]

设置后,我们可以采用下面的方式访问:

http://serverName/模块/控制器/操作/[参数名/参数值…]

同时也达到了隐藏 index.php的目的

如果你没有修改服务器的权限,可以在index.php入口文件做修改,这不是正确的做法,并且不一定成功,视服务器而定,只是在框架执行前补全$_SERVER[‘PATH_INFO’]参数

$_SERVER[‘PATH_INFO’] = $_SERVER[‘REQUEST_URI’ ];

参考文章: https://www.fujieace.com/thinkphp/pathinfo.html

点赞