一些相關資源:
- http://zhupou.cn/drupal-handbook/tutorials/set-up-multi-site-using-drupal
- http://drupal.org/node/99840
- http://drupal.org/node/66657
- http://drupal.org/node/428596
- http://drupal.org/node/69199#comment-129840
- http://drupal.org/node/14697
- http://drupal.org/node/147828
- http://drupal.org/node/63863
- http://drupal.org/node/125539
- http://drupal.org/node/43816
- http://drupal.org/node/25011
- http://drupal.org/node/25011#comment-136227
Drupal 實在是一個很強大的網絡操作系統,它內建的多站點安裝機制非常強大,但也比較復雜,下面我來總結一下本站(robinlord.org)的多站點安裝方案。
很多朋友購買的虛擬主機對數據庫或者空間或者可以綁定的域名或者能夠設置的子域名限制非常厲害,但是使用 drupal 這一切將不再是問題。Drupal 可以使用一個數據庫來安裝多個站點,這個只要在安裝過程中設定數據表前綴即可。
我來分析下本站(robinlord.org)的結構。本站目前共使用同一套 Drupal 代碼搭建了三個獨立的站點:blogs.robinlord.org、drupal.robinlord.org、 drupal.robinlord.org/hanhua。是的,沒錯,最后那個是獨立的站點,不是一個路徑,這個是利用 drupal 的子目錄來做獨立站點的,本文的關鍵也就在這一切的實現。
本站是采用泛域名解析+.htacess的方案來實現的。
首先需要了解什么是泛域名解析,然后把所有的 *.roginlord.org 解析到站點的 web 根目錄(public_html),接著在根目錄下建立 drupal 目錄做為 drupal 的代碼目錄,接著在根目錄下的 .htacess 添加 urlrewrite 規則,把對 drupal.robinlord.org 和 blogs.robinlord.org 的請求全部定向到 drupal 目錄,其它的二級域名目錄這樣做。至于 drupal.robinlord.org/hanhua ,則是建立一個名為 hanhua 軟鏈接到 drupal 目錄(Linux 主機,windows 主機再行研究)。比如 /public_html/hanhua 就是到 /public_html/drupal 的軟鏈接,同時在給 drupal.robinlord.org 做url重寫時避開對 hanhua 的重寫,就實現了。
下面是站點的目錄結構:
public_html/ --|
|-- drupal/ #[目錄]這個是 drupal 的程序目錄
|--hanhua/ #[目錄]這個是到 drupal 的軟鏈接
|--.htacess #[文件]這里配置目錄的 URL 重寫規則
下面是根目錄下 .htacess 的內容:
<IfModule mod_rewrite.c>
RewriteEngine on
#重寫二級域名的路徑
RewriteCond %{HTTP_HOST} ^blogs".robinlord".org$
RewriteRule ^(.*)$ drupal/$1 [L]
RewriteCond %{HTTP_HOST} ^drupal".robinlord".org$
#對于子目錄獨立站點的配置
RewriteCond %{REQUEST_URI} !^hanhua
RewriteRule ^(.*)$ drupal/$1 [L]
</IfModule>
這樣就實現了多個站點的訪問,下面是多站點的安裝及公用用戶數據的設置。
首先,在安裝之前手動建立好各個站點的配置文件,遵循多站點目錄的命名規則。本站則建立了如下幾個目錄:
sites/--|
|-- blogs.robinlord.org
|-- drupal.robinlord.org
|-- drupal.robinlord.org.hanhua
在每個目錄手動建立相應的 settings.php ,下面是 blogs.robinlord.org 的 settings.php 配置文件中需要手動設定的地方,其他配置在安裝過程中會自動設置。
$db_url = 'mysql://username:password@localhost/databasename';
$db_prefix = array(
'default' => 'blogs_',
'users' => 'shared_',
'access' => 'shared_',
'authmap' => 'shared_',
'sessions' => 'shared_',
'profile_fields' => 'shared_',
'profile_values' => 'shared_',
'languages' => 'shared_',
'locales_source' => 'shared_',
'locales_target' => 'shared_',
);
$base_url = 'http://blogs.robinlord.org';
$cookie_domain = 'robinlord.org';
$db_url 是數據庫配置。
$db_prefix 設定表前綴,default 設定站點默認的表前綴,其他的則是數據表的名稱及其對應的前綴設定,一般都設為 'shared_'。
$base_url 設定站點根域名,這個必須根據具體情況設置,負責站點路徑可能會出錯。
$cookie_domain 這個就是多站點公用登陸的關鍵,設置為站點的根域,即可實現在多站點登陸一次即可。當然還需要公用 user 和 session 相關的表,這個前面已經配置好了。
設定好配置文件后,就可以開始安裝進程。因為已經設定了數據庫配置,所以安裝程序會直接跳過這些設置的頁面而直接開始安裝。