使用一个Codeigniter安装的多个动态域

时间:2011-10-07 16:28:22

标签: codeigniter

我的一项工作是管理遍布全国各地的58个网站。他们每个人都有自己的域名,并且都位于Media Temple的同一个专属虚拟服务中。每个约19页的网站使用完全相同的html / css / php代码。对于每个使用的主题,图像从位于不同文件夹中的中央存储库提供给每个站点。

我想要做的是安装CI2的单个安装,包括应用程序文件夹,因为站点之间的所有不同内容都存储在数据库中。只要我可以给控制器一个唯一的属性编号(我希望他们在访问每个域中的index.php页面时可以这样做),那么我的所有网站都可以正常工作。

在我读过的所有答案中,建议是复制应用程序文件夹并重新使用核心。最适合我的是重用应用程序文件夹。然后,当我进行修改时,它会级联到所有网站,而不必触及58页。

这可能吗?

2 个答案:

答案 0 :(得分:11)

如果所有文件都相同且应用程序之间唯一的变化是来自数据库的数据,那么您可以这样做:

  • 将所有域指向您的docroot以进行CI安装
  • 在index.php中
  • ,确定您需要为当前请求的域使用哪个数据库连接:

 // index.php
$domain = $_SERVER['SERVER_NAME'];
switch ($domain)
{
    case 'www.firstsite.com':
        $this->load->database('firstsitedb');
        break;
    case 'www.secondsite.com':
        $this->load->database('secondsitedb');
        break;
    default:
        show_error('No Site Found');
        break;
}

**或**

如果它们各自使用相同的数据库,并且您需要能够在查询中使用变量,那么只需基于switch / case设置常量,而不是加载不同的数据库。然后,您可以在查询中的整个应用程序中使用该常量。

 // index.php
$domain = $_SERVER['SERVER_NAME'];
$site_id = 0; // default
switch ($domain)
{
    case 'www.firstsite.com':
        $site_id = 1;
        break;
    case 'www.secondsite.com':
        $site_id = 2;
        break;
    default:
        show_error('No Site Found');
        break;
}
define('SITE_ID', $site_id);

答案 1 :(得分:0)

使用Codeigniter 2.2,index.php现在允许设置配置数组项(该功能记录在该文件中)。因此,可以将请求的域保存为有效的站点变量:

$assign_to_config['site_domain'] = empty($_SERVER['SERVER_NAME']) ? 'default.dev' : $_SERVER['SERVER_NAME'];

稍后您可以将此site_domain字符串与数据库查找匹配,以获取必需的内容&主题观点等。