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

  1. $domain = $_G['setting']['domain'];
  2. //$_G['setting']['domain'] 為後臺-> 全域性-> 域名設定下設定的域名,為陣列。
  3. $channelrootdomain = !empty($domain['root']) && !empty($domain['root']['channel']) ? $domain['root']['channel'] : '';
  4. //$channelrootdomain 為頻道根域名,如果沒有設定頻道根域名則為空。
  5. $portaldomain = '';
  6. if(!empty($domain['app']['portal'])) {
  7.         $portaldomain = 'http://'.$domain['app']['portal'].$_G['siteroot'];
  8. } elseif(!empty($domain['app']['default'])) {
  9.         $portaldomain = 'http://'.$domain['app']['default'].$_G['siteroot'];
  10. } else {
  11.         $portaldomain = $_G['siteurl'];
  12. }
  13. //$portaldomain 為門戶域名
  14. //$domain['app']['default'] 為應用域名下的門戶域名
  15. //$domain['app']['default'] 為應用域名下的預設域名
  16. //$_G['siteurl'] 為站點 url
  1. if($channelrootdomain && $data[$topid]['domain']){
  2. //如果存在頻道根域名,同時設定該頻道欄目繫結了域名
  3.         $url = 'http://'.$data[$topid]['domain'].'.'.$channelrootdomain.'/';
  4.         //設定該頻道欄目的 url 為 http://頻道欄目繫結的域名. 頻道根域名/
  5.         if($foldername) {
  6.         //如果設定了頻道的目錄名稱
  7.                 if(!empty($value['upid'])) {
  8.                 //如果存在父級分類
  9.                         $url .= $foldername;
  10.                         //設定該頻道欄目的 url 為 http://頻道欄目繫結的域名. 頻道根域名/頻道的目錄名稱
  11.                 }
  12.         } else {
  13.                 $url = $portaldomain.'portal.php?mod=list&catid='.$key;
  14.                 //沒有設定頻道的目錄名稱的話,設定該頻道欄目的 url 為門戶域名.poral.php?mod=list&catid=x(x 為該頻道欄目 ID)
  15.                 //從這裡可以看出來,如果僅設定了頻道域名而沒有設定頻道的目錄名稱,則頻道欄目的 url 還是會使用門戶域名而非頻道欄目繫結的域名
  16.         }
  17. } elseif ($foldername) {
  18. //沒有設定頻道根域名,但是設定了頻道的目錄名稱
  19.         $url = $portaldomain.$foldername;
  20.         //設定該頻道欄目的 url 為門戶域名. 頻道的目錄名稱
  21.         if(substr($url, -1, 1) != '/') $url.= '/';
  22. } else {
  23. //沒有設定頻道根域名,沒有設定頻道的目錄名稱
  24.         $url = $portaldomain.'portal.php?mod=list&catid='.$key;
  25.         //設定該頻道欄目的 url 為門戶域名.portal.php?mod=list&catid=x(x 為該頻道欄目 ID)
  26. }