diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 388ec8048..10938f7e1 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -238,7 +238,6 @@ class Context // Set global variables for backward compatibility. $GLOBALS['__Context__'] = $this; - $this->_COOKIE = $_COOKIE; // Set information about the current request. $this->setRequestMethod(); @@ -263,6 +262,7 @@ class Context $oModuleModel = getModel('module'); $site_module_info = $oModuleModel->getDefaultMid() ?: new stdClass; self::set('site_module_info', $site_module_info); + self::set('_default_url', self::$_instance->db_info->default_url = self::getDefaultUrl($site_module_info)); self::set('_http_port', self::$_instance->db_info->http_port = $site_module_info->http_port ?: null); self::set('_https_port', self::$_instance->db_info->https_port = $site_module_info->https_port ?: null); self::set('_use_ssl', self::$_instance->db_info->use_ssl = $site_module_info->security ?: 'none'); @@ -338,6 +338,7 @@ class Context // start session $relax_key_checks = ($this->act === 'procFileUpload' && preg_match('/shockwave\s?flash/i', $_SERVER['HTTP_USER_AGENT'])); Rhymix\Framework\Session::start(false, $relax_key_checks); + $this->_COOKIE = $_COOKIE; // start output buffer ob_start(); @@ -517,14 +518,6 @@ class Context $db_info->ftp_info->ftp_pasv = $config['ftp']['pasv'] ? 'Y' : 'N'; $db_info->ftp_info->ftp_root_path = $config['ftp']['path']; $db_info->ftp_info->sftp = $config['ftp']['sftp'] ? 'Y' : 'N'; - $db_info->default_url = $config['url']['default']; - if (!$db_info->default_url) - { - $db_info->default_url = (RX_SSL ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . RX_BASEURL; - } - $db_info->http_port = $config['url']['http_port']; - $db_info->https_port = $config['url']['https_port']; - $db_info->use_ssl = $config['url']['ssl']; $db_info->lang_type = $config['locale']['default_lang']; $db_info->time_zone = $config['locale']['internal_timezone']; $db_info->time_zone = sprintf('%s%02d%02d', $db_info->time_zone >= 0 ? '+' : '-', abs($db_info->time_zone) / 3600, (abs($db_info->time_zone) % 3600 / 60)); @@ -596,11 +589,26 @@ class Context /** * Return default URL * + * @param object $site_module_info (optional) * @return string Default URL */ - public static function getDefaultUrl() + public static function getDefaultUrl($site_module_info = null) { - return self::$_instance->db_info->default_url; + if ($site_module_info === null && ($default_url = self::get('_default_url'))) + { + return $default_url; + } + + if ($site_module_info === null) + { + $site_module_info === self::get('site_module_info'); + } + + $prefix = $site_module_info->security === 'always' ? 'https://' : 'http://'; + $hostname = $site_module_info->domain; + $port = $site_module_info->security === 'always' ? $site_module_info->https_port : $site_module_info->http_port; + $result = $prefix . $hostname . ($port ? sprintf(':%d', $port) : '') . RX_BASEURL; + return $result; } /** @@ -1539,6 +1547,10 @@ class Context } // If $domain is set, handle it (if $domain is vid type, remove $domain and handle with $vid) + if (strpos($domain, '/') !== false) + { + $domain = Rhymix\Framework\URL::getDomainFromURL($domain); + } if($domain && isSiteID($domain)) { $vid = $domain; @@ -1743,7 +1755,7 @@ class Context */ public static function getRequestUri($ssl_mode = FOLLOW_REQUEST_SSL, $domain = null) { - static $url = array(); + static $domain_infos = array(); // Check HTTP Request if(!isset($_SERVER['SERVER_PROTOCOL'])) @@ -1756,20 +1768,6 @@ class Context $ssl_mode = ENFORCE_SSL; } - if($domain) - { - $domain_key = md5($domain); - } - else - { - $domain_key = 'default'; - } - - if(isset($url[$ssl_mode][$domain_key])) - { - return $url[$ssl_mode][$domain_key]; - } - switch($ssl_mode) { case FOLLOW_REQUEST_SSL: $use_ssl = RX_SSL; @@ -1780,50 +1778,21 @@ class Context break; } - if($domain) + $site_module_info = self::get('site_module_info'); + if ($domain !== null && $domain !== $site_module_info->domain) { - $target_url = rtrim(trim($domain), '/') . RX_BASEURL; - } - else - { - $target_url = $_SERVER['HTTP_HOST'] . RX_BASEURL; - } - - $url_info = parse_url('http://' . $target_url); - - if($use_ssl != RX_SSL) - { - unset($url_info['port']); - } - - if($use_ssl) - { - $port = self::get('_https_port'); - if($port && $port != 443) + if (!isset($domain_infos[$domain])) { - $url_info['port'] = $port; - } - elseif($url_info['port'] == 443) - { - unset($url_info['port']); + $domain_infos[$domain] = getModel('module')->getSiteInfoByDomain($domain); } + $site_module_info = $domain_infos[$domain] ?: $site_module_info; } - else - { - $port = self::get('_http_port'); - if($port && $port != 80) - { - $url_info['port'] = $port; - } - elseif($url_info['port'] == 80) - { - unset($url_info['port']); - } - } - - $url[$ssl_mode][$domain_key] = sprintf('%s://%s%s%s', $use_ssl ? 'https' : $url_info['scheme'], $url_info['host'], $url_info['port'] && $url_info['port'] != 80 ? ':' . $url_info['port'] : '', $url_info['path']); - - return $url[$ssl_mode][$domain_key]; + + $prefix = ($use_ssl && $site_module_info->security !== 'none') ? 'https://' : 'http://'; + $hostname = $site_module_info->domain; + $port = ($use_ssl && $site_module_info->security !== 'none') ? $site_module_info->https_port : $site_module_info->http_port; + $result = $prefix . $hostname . ($port ? sprintf(':%d', $port) : '') . RX_BASEURL; + return $result; } /** diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 983892843..683eef647 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -251,26 +251,6 @@ class ModuleHandler extends Handler $module_info = $site_module_info; } - // redirect, if site_srl of module_info is different from one of site's module_info - if($module_info && $module_info->site_srl != $site_module_info->site_srl && !Rhymix\Framework\UA::isRobot()) - { - // If the module is of virtual site - if($module_info->site_srl) - { - $site_info = $oModuleModel->getSiteInfo($module_info->site_srl); - $redirect_url = getNotEncodedSiteUrl($site_info->domain, 'mid', Context::get('mid'), 'document_srl', Context::get('document_srl'), 'module_srl', Context::get('module_srl'), 'entry', Context::get('entry')); - // If it's called from a virtual site, though it's not a module of the virtual site - } - else - { - $redirect_url = getNotEncodedSiteUrl(Context::getDefaultUrl(), 'mid', Context::get('mid'), 'document_srl', Context::get('document_srl'), 'module_srl', Context::get('module_srl'), 'entry', Context::get('entry')); - } - - Context::setCacheControl(0); - header("Location: $redirect_url", true, 301); - return false; - } - // redirect, if site start module if(Context::getRequestMethod() === 'GET' && isset($_GET['mid']) && $_GET['mid'] === $site_module_info->mid && count($_GET) === 1) { diff --git a/modules/module/module.controller.php b/modules/module/module.controller.php index f5568f294..6c7298d24 100644 --- a/modules/module/module.controller.php +++ b/modules/module/module.controller.php @@ -1087,18 +1087,11 @@ class moduleController extends module if(is_null($lang)) { - $site_module_info = Context::get('site_module_info'); - if(!$site_module_info) - { - $oModuleModel = getModel('module'); - $site_module_info = $oModuleModel->getDefaultMid(); - Context::set('site_module_info', $site_module_info); - } - $cache_file = sprintf('%sfiles/cache/lang_defined/%d.%s.php', _XE_PATH_, $site_module_info->site_srl, Context::getLangType()); + $cache_file = sprintf('%sfiles/cache/lang_defined/%d.%s.php', _XE_PATH_, 0, Context::getLangType()); if(!file_exists($cache_file)) { $oModuleAdminController = getAdminController('module'); - $oModuleAdminController->makeCacheDefinedLangCode($site_module_info->site_srl); + $oModuleAdminController->makeCacheDefinedLangCode(0); } if(file_exists($cache_file)) @@ -1108,7 +1101,7 @@ class moduleController extends module if($cacheFileMtime < $moduleAdminControllerMtime) { $oModuleAdminController = getAdminController('module'); - $oModuleAdminController->makeCacheDefinedLangCode($site_module_info->site_srl); + $oModuleAdminController->makeCacheDefinedLangCode(0); } require_once($cache_file); diff --git a/modules/module/module.model.php b/modules/module/module.model.php index 42665aea8..b58817b6c 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -60,7 +60,11 @@ class moduleModel extends module { if (strpos($domain, '/') !== false) { - $domain = parse_url($domain, PHP_URL_HOST); + $domain = Rhymix\Framework\URL::getDomainFromURL($domain); + if ($domain === false) + { + return null; + } } $args = new stdClass(); @@ -117,7 +121,7 @@ class moduleModel extends module } } - $domain_info->site_srl = $domain_info->domain_srl; + $domain_info->site_srl = 0; $domain_info->settings = $domain_info->settings ? json_decode($domain_info->settings) : new stdClass; $domain_info->default_language = $domain_info->settings->language ?: config('locale.default_lang');