入口文件index.php分析: 整個文件就是對域名的判斷 相關設置在後臺-》全局-》域名設置中 相關文件保存在/data/cache/cache_domain.php中
//$_SERVER['QUERY_STRING']獲取url中參數部分(也就是問號後面的字符) 當url參數不爲空而且參數是數字類型的時候給$_ENV['curapp']和$_GET賦值 其中$_ENV獲取指定環境變量相似於getenv()
if(!empty($_SERVER['QUERY_STRING']) && is_numeric($_SERVER['QUERY_STRING'])) {
$_ENV['curapp'] = 'home';
$_GET = array('mod'=>'space', 'uid'=>$_SERVER['QUERY_STRING']);
} else {
$url = ''; //目標變量
$domain = $_ENV = array(); //聲明兩個數組
$jump = false; //聲明一個布爾類型變量
@include_once './data/cache/cache_domain.php';
////////////////////////////////////////////////////////////////////////////////////////
//引入一個參數文件以下:php
$_ENV['domain'] = $domain; //將參數文件中的二維數組變量賦值給$_ENV['domain']
if(empty($_ENV['domain'])) { //判斷參數文件是否存在
$_ENV['curapp'] = 'forum'; //當參數文件不存在的時候 賦值$_ENV['curapp'] = 'forum';
} else {
//當參數文件存在的時候 聲明而且賦值關聯數組$_ENV['defaultapp']
$_ENV['defaultapp'] = array('portal.php' => 'portal', 'forum.php' => 'forum', 'group.php' => 'group', 'home.php' => 'home');
//同時用句號分割當前域名如www.84777777.com $_ENV['hostarr']就會是www 84777777 com等3個元素的數組
$_ENV['hostarr'] = explode('.', $_SERVER['HTTP_HOST']);
//strpos(str1,str2,start)在str1中從start開始查找str2 返回第一次找到所在的位置 start可選爲從頭開始
//如www.84777777.com那麼這裏 $_ENV['domainroot']的值爲84777777.com
$_ENV['domainroot'] = substr($_SERVER['HTTP_HOST'], strpos($_SERVER['HTTP_HOST'], '.')+1);
//對前面加載的參數文件裏面app元素的分析 $_ENV['domain']['app']是否爲空 是不是數組 是否包含值
//爲$_SERVER['HTTP_HOST']的元素
if(!empty($_ENV['domain']['app']) && is_array($_ENV['domain']['app']) && in_array($_SERVER['HTTP_HOST'], $_ENV['domain']['app'])) {
//當3個條件所有知足後的操做 array_search(val,arr,bool)在指定數組中搜索指定的元素而且返回該元素的鍵值 第//三個參數爲可選 布爾類型當爲TRUE的時候還須要判斷數組中的元素的類型是否符合指定元素的類型
$_ENV['curapp'] = array_search($_SERVER['HTTP_HOST'], $_ENV['domain']['app']);
//當
if($_ENV['curapp'] == 'mobile') {
$_ENV['curapp'] = 'forum';
if(@$_GET['mobile'] != 'no') {
@$_GET['mobile'] = 'yes';
}
}
//當
if($_ENV['curapp'] == 'default' || !isset($_ENV['defaultapp'][$_ENV['curapp'].'.php'])) {
$_ENV['curapp'] = '';
}
}
//對前面加載的參數文件裏面root元素的分析
elseif(!empty($_ENV['domain']['root']) && is_array($_ENV['domain']['root']) && in_array($_ENV['domainroot'], $_ENV['domain']['root'])) {
//給$_G['setting']['holddomain']賦值 默認是帶www開頭 其中$_G是discuz自定義變量 位於文件/source///class/class_core.php中
$_G['setting']['holddomain'] = $_ENV['domain']['holddomain'] ? $_ENV['domain']['holddomain'] : array('www');
$list = $_ENV['domain']['list'];
if(isset($list[$_SERVER['HTTP_HOST']])){
$domain = $list[$_SERVER['HTTP_HOST']];
$id = intval($domain['id']);
switch($domain['idtype']) {
case 'subarea':
$_ENV['curapp'] = 'forum';
$_GET['gid'] = $id;
break;
case 'forum':
$_ENV['curapp'] = 'forum';
$_GET['mod'] = 'forumdisplay';
$_GET['fid'] = $id;
break;
case 'topic':
$_ENV['curapp'] = 'portal';
$_GET['mod'] = 'topic';
$_GET['topicid'] = $id;
break;
case 'channel':
$_ENV['curapp'] = 'portal';
$_GET['mod'] = 'list';
$_GET['catid'] = $id;
break;
}
} elseif(count($_ENV['hostarr']) > 2 && $_ENV['hostarr'][0] != 'www' && !checkholddomain($_ENV['hostarr'][0])) {
$_ENV['prefixdomain'] = addslashes($_ENV['hostarr'][0]); //域名前綴 相似www
$_ENV['domainroot'] = addslashes($_ENV['domainroot']); //域名相似84777777.com
require_once './source/class/class_core.php'; //discuz核心類
$discuz = & discuz_core::instance();
$discuz->init_setting = true;
$discuz->init_user = false;
$discuz->init_session = false;
$discuz->init_cron = false;
$discuz->init_misc = false;
$discuz->init_memory = false;
$discuz->init();
$jump = true;
$domain = DB::fetch_first("SELECT * FROM ".DB::table('common_domain')." WHERE domain='$_ENV[prefixdomain]' AND domainroot='$_ENV[domainroot]' LIMIT 1");
$apphost = $_ENV['domain']['app'][$domain['idtype']] ? $_ENV['domain']['app'][$domain['idtype']] : $_ENV['domain']['app']['default'];
$apphost = $apphost ? 'http://'.$apphost.'/' : '';
switch($domain['idtype']) {
case 'home':
if($_G['setting']['rewritestatus'] && in_array('home_space', $_G['setting']['rewritestatus'])) {
$url = rewriteoutput('home_space', 1, $apphost, $domain['id']);
} else {
$url = $apphost.'home.php?mod=space&uid='.$domain['id'];
}
break;
case 'group':
if($_G['setting']['rewritestatus'] && in_array('group_group', $_G['setting']['rewritestatus'])) {
$url = rewriteoutput('group_group', 1, $apphost, $domain['id']);
} else {
$url = $apphost.'forum.php?mod=group&fid='.$domain['id'].'&page=1';
}
break;
}
}
} else {
$jump = true;
}
if(empty($url) && empty($_ENV['curapp'])) {
if(!empty($_ENV['domain']['defaultindex']) && !$jump) {
if($_ENV['defaultapp'][$_ENV['domain']['defaultindex']]) {
$_ENV['curapp'] = $_ENV['defaultapp'][$_ENV['domain']['defaultindex']];
} else {
$url = $_ENV['domain']['defaultindex'];
}
} else {
if($jump) {
$url = empty($_ENV['domain']['app']['default']) ? (!empty($_ENV['domain']['defaultindex']) ? $_ENV['domain']['defaultindex'] : 'forum.php') : 'http://'.$_ENV['domain']['app']['default'];
} else {
$_ENV['curapp'] = 'forum';
}
}
}
}
}
if(!empty($url)) {
$delimiter = strrpos($url, '?') ? '&' : '?';
if($_GET['fromuid']) {
$url .= $delimiter.'fromuid='.$_GET['fromuid'];
} elseif($_GET['fromuser']) {
$url .= $delimiter.'fromuser='.$_GET['fromuser'];
}
header("HTTP/1.1 301 Moved Permanently");
header("location: $url");
} else {
require './'.$_ENV['curapp'].'.php';
}
//檢查域名是否有效
function checkholddomain($domain) {
global $_G;
$domain = strtolower($domain);
if(preg_match("/^[^a-z]/i", $domain)) return true;
$holdmainarr = empty($_G['setting']['holddomain']) ? array('www') : explode('|', $_G['setting']['holddomain']);
$ishold = false;
foreach ($holdmainarr as $value) {
if(strpos($value, '*') === false) {
if(strtolower($value) == $domain) {
$ishold = true;
break;
}
} else {
$value = str_replace('*', '.*?', $value);
if(@preg_match("/$value/i", $domain)) {
$ishold = true;
break;
}
}
}
return $ishold;
}
?>html