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

jgr*_*ois 3 codeigniter

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

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

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

这可能吗?

swa*_*ins 12

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

  • 将所有域指向您的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;
}
Run Code Online (Sandbox Code Playgroud)

**要么**

如果它们各自使用相同的数据库,并且您需要能够在查询中使用变量,那么只需基于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);
Run Code Online (Sandbox Code Playgroud)

  • 好答案.为你+1. (2认同)