我们计划为多个网站托管一个CMS。
YII中是否有办法可以做到这一点,想法很简单,我们希望为所有域共享单个应用程序和单个数据库,但我们会让他们为不同的网站选择不同的主题。
网站上的意思是完全不同的域名。
我们还需要做什么其他设置才能将所有域指向单个服务器?
编辑::
我不希望每个域的不同服务目录。我想做什么,只安装一个。
即。 /服务器/网络/主
然后是所有域名
a.com,b.com,c.com读取相同的目录“/ server / www / master”和相同的DB。并且记录在站点的基础上获得文件管理器。
答案 0 :(得分:2)
我和Yii完全一样,所以是的,这是可能的。
在Apache设置中,请确保将所有域名指向同一目录(使用ServerAlias - http://httpd.apache.org/docs/2.2/mod/core.html#serveralias)。
在我的数据库中,我创建了一个表,每个网站都有一行,将域名存储为其中一个字段。
在我的ApplicationConfigBehavior.php :: beginRequest(为每个请求执行)中,我做了类似这样的事情:
/**
* Load configuration that cannot be put in config/main
*/
public function beginRequest()
{
if(empty(Yii::app()->session['community'])){
$current_community = Community::model()->with(array(
'communityHosts'=>array(
'joinType'=>'INNER JOIN',
'condition'=>'`communityHosts`.hostname= :hostname',
'params' => array(':hostname' => $_SERVER['SERVER_NAME'])
),
))->find();
Yii::app()->session['community'] = serialize($current_community);
}
else{
$current_community = unserialize(Yii::app()->session['community']);
}
if(!empty($current_community)){
Yii::app()->name = $current_community->name;
Yii::app()->params['currentCommunity'] = $current_community;
Yii::app()->language = $current_community->language;
}
else{
//TODO: Throw error
session_unset();
die('Hostname ' . $_SERVER['SERVER_NAME'] .' not found');
}
}
基本上说,在我的数据库中查找此服务器名称,获取当前的“社区”(我的网站),并在会话中存储所有设置(主题,网站名称等)。
确切的查询可能与您不一样。这只是为了给你一般的想法。使其适应您的数据库架构,或者您存储每个网站的设置。
答案 1 :(得分:0)
在apache虚拟主机文件中,设置站点名称
SetEnv SITE_NAME "CMSA"
使用
在代码中获取网站名称defined('SITE_NAME') || define('SITE_NAME', ( getenv('SITE_NAME') );
使用配置中的常量并根据站点过滤记录。
同样可以声明主题。