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