有没有办法我们可以用一个数据库为多个域构建YII多站点应用程序

时间:2013-10-05 19:12:55

标签: php yii cross-domain

我们计划为多个网站托管一个CMS。

YII中是否有办法可以做到这一点,想法很简单,我们希望为所有域共享单个应用程序和单个数据库,但我们会让他们为不同的网站选择不同的主题。

网站上的意思是完全不同的域名。

我们还需要做什么其他设置才能将所有域指向单个服务器?

编辑::

我不希望每个域的不同服务目录。我想做什么,只安装一个。

即。 /服务器/网络/主

然后是所有域名

a.com,b.com,c.com读取相同的目录“/ server / www / master”和相同的DB。并且记录在站点的基础上获得文件管理器。

2 个答案:

答案 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') );

使用配置中的常量并根据站点过滤记录。

同样可以声明主题。