上一篇说的是THINKPHP3.2.3版本遇到的URL尾部是否以斜杆结尾/的错误,同样的问题出现在了THINKPHP的其他版本中,但是情况又有所不同
如:http://www.yoff.cn/Test
该情况显示正常,会自动识别到Test模块下的index方法
而:http://www.yoff.cn/Test/
该情况显示错误,会提示404错误
调试的方式是在入口位置加入 var_dump($_SERVER);die(); 以此来打印出每个位置不同的结果
最后发现
http://www.yoff.cn/Test 在$_SERVER['PATH_INFO']显示为/Test
http://www.yoff.cn/Test/ 在$_SERVER['PATH_INFO']显示为/Test/index.php
就是这个简单的区别,在/Thinkphp/Lib/Core/Dispatcher.class.php中的第93行左右
if (!empty($_SERVER['PATH_INFO'])) {
有个判断针对$_SERVER['PATH_INFO']不为空情况本来是要寻找对应的方法名,结果把index.php整个作为方法名,导致了程序的报错。
初步用了最简单的方式解决,在该行代码上方加入一个判断来避免这个错误
if(strrchr($_SERVER['PATH_INFO'],"/index.php")=="/index.php"){
$_SERVER['PATH_INFO'] = str_replace("/index.php", "", $_SERVER['PATH_INFO']);
}
发现PHP5.3之前的版本并不会出现这个问题,也许是版本升级后修改了一些规则,希望以后大家也能找到这个结果,避免再遇到这个坑爹的问题了
版权属于:
转载时必须以链接形式注明原始出处及本声明。