一些相关资源:
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 相关的表,这个前面已经配置好了。
设定好配置文件后,就可以开始安装进程。因为已经设定了数据库配置,所以安装程序会直接跳过这些设置的页面而直接开始安装。