2011-10-07 22 views
3

我的工作之一是管理58個站點,以便在全國範圍內傳播。他們各自擁有自己的領域,並且都被安置在Media Temple的同一個專屬虛擬服務器中。約19頁的網站使用完全相同的html/css/php代碼。每個網站都有一箇中央資源庫,每個主題都使用不同的文件夾。使用ONE Codeigniter安裝的多個動態域名

我想要做的是安裝包含應用程序文件夾的CI2的單個安裝,因爲站點之間的所有內容都存儲在數據庫中。只要我可以給控制器一個唯一的屬性號碼(我希望當他們訪問每個域中的index.php頁面時我可以做的),那麼我的所有網站都可以正常工作。

在我已閱讀的所有答案中,建議是複製應用程序文件夾並重新使用核心。最適合我的是還重用應用程序文件夾。然後,當我進行修改時,它將級聯到所有網站,而不必接觸58頁。

這可能嗎?

回答

9

如果所有的文件都是相同的,應用程序之間切換的唯一事情就是從數據庫中的數據,那麼你可以這樣做:

  • 指向您的文檔根目錄爲CI所有域安裝
  • 在您的index.php,確定需要使用的當前請求的域,其DB連接:

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

** **或

如果它們都使用相同的數據庫,你需要能夠在查詢中使用一個變量,那麼就設置基於交換機/箱,而不是裝載一個常數不同的數據庫然後,您可以在整個應用程序中將這個常量用於查詢。

// 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); 
+2

好答案。爲你+1。 – Tareq

+0

謝謝你的回答。我有一個問題,如果我使用config/parameters.yml文件,如何根據網站獲取不同的參數集。例如:如果我從site2.com發送郵件,我想在發送郵件時通過[email protected]與site1.com和fromsite2.com的回覆郵件聯繫。發送電子郵件功能在所有網站上共享,因爲我們使用的是單個實例。非常感謝您的幫助。謝謝。 –

0

使用Codeigniter 2.2,index.php現在允許設置配置數組項目(該功能記錄在該文件中)。因此,有可能通過執行此請求的域保存爲一個站點變量影響:

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

以後你可以匹配對數據庫查詢該SITE_DOMAIN字符串來獲取所需的內容&主題的意見等。