2011-06-09 29 views
0

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

感谢

回答

1

所有你需要做的是建立虚拟主机,并将它们指向同一个索引文件。因此,举例来说,如果你正在运行Nginx的,你可能有这样的:

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

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

如果你不知道如何设置在服务器虚拟主机,那么你就必须看,最多的其各自的文件。

+0

感谢您的答案,但我可以使用.htacess做到这一点,因为我现在拥有一个共享主机并且无法更改服务器的配置 – Peacemoon 2011-06-09 12:00:47

+0

您使用的是什么主机? – Shauna 2011-06-09 12:35:06

+0

不会设置虚拟主机不能使用CI的base_url?你不需要改变base_url吗? – zechdc 2011-11-28 22:53:24

0

我正在做类似的事情,相同的代码,但不同的数据库取决于子域。 我有用于域的表的数据库,映射“域”到“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; 

    } 

} 

对不起由lenght,但代码将解释比我糟糕的英语更好。