寻求良好实践建议:Drupal中的多站点

时间:2010-01-17 01:19:25

标签: drupal

我正在使用多站点来托管我的客户端站点。

在开发阶段,我使用子域来托管登台站点,例如client1.mydomain.com。
以下是它在SITES文件夹下的外观:

/sites/client1.mydomain.com

当网站完成并准备上线时,我为实际域创建了另一个文件夹,例如client1.com。 因此:

/sites/client1.com

接下来,我在client1.com下为FILES和SETTINGS.PHP创建了指向子域的符号链接

/sites/client1.com/settings.php --> /sites/client1.mydomain.com/settings.php

/sites/client1.com/files --> /sites/client1.mydomain.com/files

最后,为防止Google将子域和实际域都编入索引,我在.htaccess中创建了规则,将client1.mydomain.com重写为client1.com,因此,如果有人尝试访问子域,他将被重定向到实际域名。

以上安排完美无缺。但我不知何故觉得有更好的方法以简单的方式实现上述目标。请随时分享您的观点,我们非常感谢您的所有建议。

3 个答案:

答案 0 :(得分:0)

由于您似乎想要重用开发域中的 files / 目录和 settings.php ,我建议您使用默认/ 目录+符号链接以实现您的目标。

即,在开发期间

sites/default/settings.php
sites/default/files/
sites/client1.domain.com -> sites/default (symbolic link)

一旦您准备切换到他们的域名:

sites/client1.com -> sites/default

然后,您可以从虚拟主机中删除 client1.domain.com (或继续进行重写等)。

它将完成与您的方法相同的操作,但如果您在以后添加其他域作为别名(例如),则会获得所有默认请求的“保护”。

答案 1 :(得分:0)

如果您只是在站点之间共享核心和模块文件,则可以使用不同的符号链接布局。

在我的设置中,我将所有共享文件放在一个通用的,不可通过Web访问的目录中:

/var/www/drupal
/var/www/drupal/sites/all/modules

然后对于每个部署,将公共文件和文件夹符号链接到这些文件。

/var/www/client1/public_html/index.php -> /var/www/drupal/index.php
/var/www/client1/public_html/includes  -> /var/www/drupal/includes
...
/var/www/client1/public_html/sites/all -> /var/www/drupal/sites/all

然后,您可以将网站的settings.php以及该网站的任何模块或主题放在默认网站目录中

/var/www/client1/public_html/sites/default 

此布局还可以根据需要灵活地覆盖任何常见文件,例如.htaccess。

要从暂存转移到生产,您只需要将您的虚拟主机配置从暂存状态修改为生产域名。

答案 2 :(得分:0)

如果您不喜欢大量的符号链接,另一个选项是使用别名多站点支持补丁: http://drupal.org/node/231298#comment-1420180

这将允许您在配置中指定对client1.domain.com的任何请求实际上应使用/sites/client1.com/而不是/sites/client1.domain.com /。

然后当你转向制作时,你可以删除配置设置(尽管如果你不这样做,它不会伤害任何东西)。

此功能是Drupal 7的一部分,但由于新功能不会添加到Drupal 6.更多好消息是你甚至不需要在D7中仅使用文件路径,因为它不是存储作为数据库中文件的完整路径,它们使用诸如public://private://之类的模式,然后Drupal将映射到正确的文件系统路径,从而允许多个存储类型/位置具有更好的可移植性。