已在後台-> 門户-> 頻道欄目下設置某個一級欄目的綁定域名,但是訪問此域名,仍會跳轉到門户域名下的頻道地址上。
如後台設置的新聞頻道的綁定域名為 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)
- }