已在后台-> 门户-> 频道栏目下设置某个一级栏目的绑定域名,但是访问此域名,仍会跳转到门户域名下的频道地址上。
如后台设置的新闻频道的绑定域名为 news.weixiaoduo.com,设置的默认域名为 www.weixiaoduo.com,访问 news.weixiaoduo.com 会 302 跳转到 www.weixiaoduo.com/portal.php?mod=list&catid=x 的地址 (www.weixiaoduo.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)
- }