Codeigniter:多个域,但只有一个站点

时间:2011-06-09 11:47:34

标签: codeigniter dns

我正在尝试设置我的网站,该网站可以针对不同的区域设置具有不同的域,但它应该只有1个代码库。现在我必须将所有其他域重定向到主域并在该域上运行我的网站。我的问题是,是否可以设置我的主机或我的codeigniter应用程序,以便我可以在所有域中托管我的应用程序,而无需复制代码库。例如:2个站点www.domain1.com和www.domain2.com应该在同一台服务器上运行,而www.domain1.com/controller/action和www.domain2.com/controller/action应该调用相同的控制器文件。

由于

2 个答案:

答案 0 :(得分:1)

您需要做的就是设置虚拟主机并将它们指向同一个索引文件。因此,例如,如果您运行的是nginx,则可能会出现类似的内容:

server {
   url domain1.com;
   root /var/www/site/public;
}

server {
   url domain2.com;
   root /var/www/site/public;
}

如果您不知道如何在服务器中设置虚拟主机,那么您必须在相应的文档中查找。

答案 1 :(得分:1)

我正在做类似的事情,相同的代码但不同的数据库取决于子域。 我有一个包含域表的数据库,将'domain'映射到'dbname':

    CREATE TABLE IF NOT EXISTS `empresas` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `database` char(10) NOT NULL,
  `active` tinyint(1) NOT NULL,
  `domain` char(255) NOT NULL
  PRIMARY KEY (`id`),
  KEY `domain` (`domain`)
) ;

然后是一个abtract控制器基类,它产生了魔力:

<?php

class AB_Base_Controller extends CI_Controller {

    public $empresa;

    public function __construct() {

        parent::__construct();
        $this->empresa = $this->session->userdata('empresa');

        if ($this->empresa === FALSE || empty($this->empresa)) {
            $this->load->model('sistema_model', 'sistema');
            $this->empresa = $this->sistema->get_empresa();
            $this->session->set_userdata('empresa', $this->empresa );
        }

        // configure the client database
        $db['hostname'] = 'localhost';
        $db['username'] = "whatever";
        $db['password'] = "whatever";
        $db['database'] = 'tqm'.$this->empresa['database']; // the 'tqm' at the beginning is just for make difference with the rest of db
        $db['dbdriver'] = 'mysql';
        $db['dbprefix'] = '';
        $db['pconnect'] = TRUE;
        $db['db_debug'] = FALSE; //TRUE;
        $db['cache_on'] = FALSE;
        $db['cachedir'] = '';
        $db['char_set'] = 'iso-8859-1';
        $db['dbcollat'] = 'latin1_swedish_ci';
        $db['swap_pre'] = '';
        $db['autoinit'] = TRUE;
        $db['stricton'] = FALSE;

        $this->load->database($db, FALSE, TRUE);

    }

}

任何继承的控制器都将配置db。

模特:

    <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

//  CI 2.0 Compatibility
if(!class_exists('CI_Model')) { class CI_Model extends Model {} }


class Sistema_model extends CI_Model
{
    /**
     * Contiene el nombre de la tabla en la que se guardan los datos del dominio y la empresa cliente asociada
     *
     * @var string
     **/
    public $table = 'empresas';

    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Retorna la empresa basado en los datos de conexión
     *
     * @return array
     **/
    public function get_empresa()
    {
            $query = $this->db->select( 'id, database' )
                    ->where('active', 1)
                    ->where('domain',$_SERVER['SERVER_NAME'])
                    ->get($this->table);

            if( $query->num_rows() == 0 ) redirect('http://www.google.com');

            $result = $query->first_row('array');

            return $result;

    }

}

对不起,但代码的解释比我糟糕的英语要好。