【问题标题】:Codeigniter: Multiple Domains, but only 1 siteCodeigniter:多个域,但只有 1 个站点
【发布时间】:2011-09-11 15:30:36
【问题描述】:

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

谢谢

【问题讨论】:

    标签: codeigniter dns


    【解决方案1】:

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

    然后是一个具有魔力的抽象控制器基类:

    <?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);
    
        }
    
    }
    

    任何继承的控制器都将配置数据库。

    型号:

        <?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;
    
        }
    
    }
    

    很抱歉,但代码比我蹩脚的英语解释得更好。

    【讨论】:

      【解决方案2】:

      您需要做的就是设置虚拟主机并将它们指向同一个索引文件。因此,例如,如果您正在运行 nginx,您可能会遇到以下情况:

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

      如果您不知道如何在服务器中设置虚拟主机,则必须在其各自的文档中查找。

      【讨论】:

      • 感谢您的回答,但是我可以使用 .htacess 来做到这一点吗,因为我现在有一个共享主机并且无法更改服务器的配置
      • 设置虚拟主机不能使用 CI 的 base_url 吗?你也不必更改 base_url 吗?
      • zechdc - 自从我安装了基本 CI 以来已经很久了,但我目前的一个,它作为大约十几个站点的主服务器,有 $config['base_url'] = "http://$_SERVER[HTTP_HOST]/"。我假设库存安装需要像“yourdomainname.com”这样的东西。如果是这样,那么您是正确的,您可能需要更改它。
      • Peacemoon - 您应该仍然可以控制您的域指向的位置,但这取决于您的主机设置。关键是将它们指向相同的位置。或者,您可以将一个域停放在另一个域上。
      猜你喜欢
      • 2013-09-11
      • 2019-12-01
      • 2011-02-16
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多