- 普通 - 未处理
这段代码不是我写的,呵呵。是以前公司的一位同事修改的,在2.0TP刚出来的时候,他们就做了二级域名部署。今天我把这部分代码贴出来,共同研究研究呵呵。MyApp/conf 下的配置文件'APP_GROUP_LIST' => 'www,mail,shop,bbs',
'APP_MULTILEVELDOMAIN_DEPLOY_ON' => true,// 是否开启多级域名部署(目前暂时只支持二级域名)
'APP_MULTILEVELDOMAIN_DEPLOY' => array(
'www' => array('','','',true,'www'),
'mail' => array('','','',true,'mail'),
'shop' => array('','','',true,'shop'),
'bbs' => array('','','',true,'bbs'),
),
修改后的U方法:// URL组装 支持不同模式和路由
function U($url,$params=array(),$redirect=false,$suffix=true) {
if(0===strpos($url,'/'))
$url = substr($url,1);
if(!strpos($url,'://')) // 没有指定项目名 使用当前项目名
$url = APP_NAME.'://'.$url;
if(stripos($url,'@?')) { // 给路由传递参数
$url = str_replace('@?','@think?',$url);
}elseif(stripos($url,'@')) { // 没有参数的路由
$url = $url.MODULE_NAME;
}
// 分析URL地址
$array = parse_url($url);
$app = isset($array['scheme'])? $array['scheme'] :APP_NAME;
$route = isset($array['user'])?$array['user']:'';
if(defined('GROUP_NAME') && strcasecmp(GROUP_NAME,C('DEFAULT_GROUP')))
$group= GROUP_NAME;
if(isset($array['path'])) {
$action = substr($array['path'],1);
if(!isset($array['host'])) {
// 没有指定模块名
$module = MODULE_NAME;
}else{// 指定模块
if(strpos($array['host'],'-')) {
list($group,$module) = explode('-',$array['host']);
}else{
$module = $array['host'];
}
}
}else{ // 只指定操作
$module = MODULE_NAME;
$action = $array['host'];
}
if(isset($array['query'])) {
parse_str($array['query'],$query);
$params = array_merge($query,$params);
}
if(C('URL_DISPATCH_ON') && C('URL_MODEL')>0) {
$depr = C('URL_PATHINFO_MODEL')==2?C('URL_PATHINFO_DEPR'):'/';
$str = $depr;
foreach ($params as $var=>$val)
$str .= $var.$depr.$val.$depr;
$str = substr($str,0,-1);
$group = isset($group)?$group.$depr:''; if(C('APP_MULTILEVELDOMAIN_DEPLOY_ON') && C('APP_MULTILEVELDOMAIN_DEPLOY')){
$domain = trim(strtolower($group),$depr);
$deploys = (array)C('APP_MULTILEVELDOMAIN_DEPLOY');
$deploys = isset($deploys[$domain]) ? $deploys[$domain] : false;
if($deploys){
$hostArr = explode('.',$_SERVER['HTTP_HOST']);
array_shift($hostArr);
$host = implode('.',$hostArr);
$url = 'http://'.trim(strtolower($group),$depr).'.'.$host.str_replace(APP_NAME,$app,__APP__).'/';
}else{
$url = str_replace(APP_NAME,$app,__APP__).'/'.$group;
}
}else{
$url = str_replace(APP_NAME,$app,__APP__).'/'.$group;
}
if(!empty($route)) {
$url .= $route.$str;
}else{
$url .= $module.$depr.$action.$str;
}
if($suffix && C('URL_HTML_SUFFIX'))
$url .= C('URL_HTML_SUFFIX');
}else{
$params = http_build_query($params);
if(isset($group)) {
$url = str_replace(APP_NAME,$app,__APP__).'?'.C('VAR_GROUP').'='.$group.'&'.C('VAR_MODULE').'='.$module.'&'.C('VAR_ACTION').'='.$action.'&'.$params;
}else{
$url = str_replace(APP_NAME,$app,__APP__).'?'.C('VAR_MODULE').'='.$module.'&'.C('VAR_ACTION').'='.$action.'&'.$params;
}
}
if($redirect)
redirect($url);
else
return $url;
} 