3.2.3 - 严重 - 未处理
建议:在U()函数生成Url时,读取C('APP_SUB_DOMAIN_RULES')来判断当前要生成URL的模块是否被设置二级域名。 如果是就按照http://模块名.abc.com/Index/index来生成。 这样应该更理想点。
但是需要注意域名部署的多种方式:完整域名部署、子域名部署、泛域名部署、IP访问部署
BUG重现
项目涉及3个子域名 www.abc.com、admin.abc.com、staff.abc.com
当项目采用域名部署
配置文件如下
<?php
return array(
'APP_SUB_DOMAIN_DEPLOY' => 1, //开启子域名配置
'APP_SUB_DOMAIN_RULES' => array(
'www'=>'Www',
'admin' => 'Admin',
'staff' => 'Staff',
),
);
?>在https://github.com/top-think/thinkphp/tree/2f2b5b2b766fc1ae8fed682a1def0b634d3fc2e4这个版本之前。<?php
namespace Admin\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
echo U('index').'</br>';
echo U('Index/index').'</br>';
echo U('Admin/Index/index','',true,true).'</br>';
echo U('Admin/Index/index').'</br>';
}
}
?>访问http://admin.abc.com/Index/index 应该分别输出/index
/Index/index
http://admin.abc.com/Index/index
/Admin/Index/index
而更新后变成了
/Admin/Index/index
/Admin/Index/index
http://admin.abc.com/Index/index
/Admin/Index/index
这样一来原本U('Index/index')输出是 http://admin.abc.com/Index/index 的Url变成了http://admin.abc.com/Admin/Index/index。
建议:
在U()函数生成Url时,读取C('APP_SUB_DOMAIN_RULES')来判断当前的模块是否被设置二级域名。 如果是就按照http://模块名.abc.com/Index/index来生成。 这样应该更理想点。
@thinkphp
