追溯到Think/Library/Think/Dispatcher.class.php line176-187
if($urlMode == URL_COMPAT ){// 兼容模式判断
define('PHP_FILE',_PHP_FILE_.'?'.$varPath.'=');
}elseif($urlMode == URL_REWRITE ) {
$url = dirname(_PHP_FILE_);
if($url == '/' || $url == '\\')
$url = '';
define('PHP_FILE',$url);
}else {
define('PHP_FILE',_PHP_FILE_);
}
// 当前应用地址
define('__APP__',strip_tags(PHP_FILE));
如果各位不明白,看看测试代码:(其中有的值多余,但是省的各位亲检查手册,大牛请放过)echo '_PHP_FILE_:';dump(_PHP_FILE_);
echo 'dirname(_PHP_FILE_):';dump(dirname(_PHP_FILE_));
echo 'PHP_FILE:';dump(PHP_FILE);
echo '__APP__:';dump(__APP__);
echo '__MODULE__:';dump(__MODULE__);
echo "U('Login/login',''):";
dump(U('Login/login'));die();
结果如下,当'URL_MODEL'=>0,1,3的时候
当'URL_MODEL'=>2的时候

解决办法是当'URL_MODEL'=>2的时候,如果采用的是多入口,需要重新定义__APP__,也即在入口文件admin.php中重新定义
define('__APP__','/blj/admin.php');
当然还有个办法,就是除了home模块就不用'URL_MODEL'=>2了,各位自己斟酌。我个人还是觉得这个应该是个bug,因为'URL_MODEL'这个参数只是控制URL样式,理论上修改其值是不需要修改代码的,当然如果官方在手册或者FAQ中特别说明就是我看的不仔细了。
第一次学习thinkphp框架,班门弄斧还望各位大牛见谅。
最佳答案
