域名部署环境下U函数生成URL的问题

浏览:785 发布日期:2016/02/12
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
评论(
后面还有条评论,点击查看>>