2011-06-09 27 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,但代碼將解釋比我糟糕的英語更好。