我正在尝试设置我的网站,该网站可以针对不同的区域设置具有不同的域,但它应该只有1个代码库。现在我必须将所有其他域重定向到主域并在该域上运行我的网站。我的问题是,是否可以设置我的主机或我的codeigniter应用程序,以便我可以在所有域中托管我的应用程序,而无需复制代码库。例如:2个站点www.domain1.com和www.domain2.com应该在同一台服务器上运行,而www.domain1.com/controller/action和www.domain2.com/controller/action应该调用相同的控制器文件。
由于
答案 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;
}
}
对不起,但代码的解释比我糟糕的英语要好。