访问门户频道绑定的域名仍跳转到默认域名下的分析
问题描述:
已在后台->门户->频道栏目下设置某个一级栏目的绑定域名,但是访问此域名,仍会跳转到门户域名下的频道地址上。
如后台设置的新闻频道的绑定域名为news.a.com,设置的默认域名为www.a.com,访问news.a.com会302跳转到www.a.com/portal.php?mod=list&catid=x的地址(www.a.com为门户域名,x为新闻频道的ID)。
原因:
绑定的域名生效同时还需要设置频道的目录名称,否则会跳转到门户域名下的频道地址。
代码分析:
在cache_portalcategory.php文件中的build_cache_portalcategory函数中,
$domain = $_G['setting']['domain']; //$_G['setting']['domain']为后台->全局->域名设置下设置的域名,为数组。 $channelrootdomain = !empty($domain['root']) && !empty($domain['root']['channel']) ? $domain['root']['channel'] : ''; //$channelrootdomain为频道根域名,如果没有设置频道根域名则为空。 $portaldomain = ''; if(!empty($domain['app']['portal'])) { $portaldomain = 'http://'.$domain['app']['portal'].$_G['siteroot']; } elseif(!empty($domain['app']['default'])) { $portaldomain = 'http://'.$domain['app']['default'].$_G['siteroot']; } else { $portaldomain = $_G['siteurl']; } //$portaldomain为门户域名 //$domain['app']['default']为应用域名下的门户域名 //$domain['app']['default']为应用域名下的默认域名 //$_G['siteurl']为站点url
if($channelrootdomain && $data[$topid]['domain']){ //如果存在频道根域名,同时设置该频道栏目绑定了域名 $url = 'http://'.$data[$topid]['domain'].'.'.$channelrootdomain.'/'; //设置该频道栏目的url为http://频道栏目绑定的域名.频道根域名/ if($foldername) { //如果设置了频道的目录名称 if(!empty($value['upid'])) { //如果存在父级分类 $url .= $foldername; //设置该频道栏目的url为http://频道栏目绑定的域名.频道根域名/频道的目录名称 } } else { $url = $portaldomain.'portal.php?mod=list&catid='.$key; //没有设置频道的目录名称的话,设置该频道栏目的url为门户域名.poral.php?mod=list&catid=x(x为该频道栏目ID) //从这里可以看出来,如果仅设置了频道域名而没有设置频道的目录名称,则频道栏目的url还是会使用门户域名而非频道栏目绑定的域名 } } elseif ($foldername) { //没有设置频道根域名,但是设置了频道的目录名称 $url = $portaldomain.$foldername; //设置该频道栏目的url为门户域名.频道的目录名称 if(substr($url, -1, 1) != '/') $url.= '/'; } else { //没有设置频道根域名,没有设置频道的目录名称 $url = $portaldomain.'portal.php?mod=list&catid='.$key; //设置该频道栏目的url为门户域名.portal.php?mod=list&catid=x(x为该频道栏目ID) }
:mrgreen: 虽然看不懂 但是感觉很厉害的样子
:lol: 我也不懂,超级厉害的样子,哈哈哈
呃,查了半个多小时结果发现是另外一个设置导致的,程序上的关联性还是很差啊。。 :arrow:
虽然看不懂 但是感觉很厉害的样子。。。