我在灯(debian、apache、php、mysql)服务器上运行 Drupal 多站点环境。
我当前的新项目工作流程是:
- 在我的公司网站上激活一个子域(假设项目是 foo.com,我激活 foo.example.com)
- 由于 plesk (这对 drupal 有点不友好),我的步骤是:
- 在plesk中创建新的子域,php以fastcgi模式运行
- 创建数据库
- 删除 httpdocs 文件夹,重新创建它并创建站点文件夹
- 将每个文件的符号链接到
/var/www/vhosts/drupal
站点和 tmp 文件夹、robots.txt 和 .htacces 文件的文件夹(drupal 代码库)中(通常将按域自定义) - 在
foo.example.com
里面创建文件夹,sites
到/var/www/vhosts/drupal/sites/all
文件夹的符号链接,然后从sites/foo.com
到返回一个符号链接/var/www/vhosts/drupal/sites/foo.example.com
(为了让 drush看到所有域到一些多站点任务,比如 crontab)
- 在子域中安装、配置drupal,完成项目所需的一切
此时,我需要将项目从子域切换到最终域 foo.com,它也将驻留在我的服务器上。
我不太喜欢域重定向等其他一些技巧,我希望最终项目是“干净的”(对于多站点环境中的干净意味着什么)。
实际上我做了这些步骤:
- 创建域(通过 plesk)和数据库;
- 将子域 httpdocs 复制到完整域 httpdocs (
cp -a /var/www/vhosts/example.com/subdomains/foo/httpdocs /var/www/vhosts/foo.com/httpdocs
) - 更改 httpdocs 的所有者和组以匹配域的所有者和组
- 登录到 drupal,更改网站信息和文件系统路径。
这让我可以做我想做的事,但我对节点的 html 内容有一些问题;特别是对于那些包含链接、图像和文件的那些(即使 IMCE 被配置为使用相对路径),将指向/sites/foo.example.com/files/[...]
而不是/sites/foo.com/files/[...]
.. 这也发生在 cck 文件字段中。
正如我所说,我需要一个干净的解决方案,我知道我可以从/sites/foo.example.com
to建立一个符号链接,/sites/foo.com
但我真的不喜欢这种方式。
到目前为止,我尝试搜索/替换所有出现在数据库 sql 转储中:
sed 's/foo.example.com/foo.com/g' dump.sql > foo.com.sql
但这似乎阻碍了某些事情;我在 boostrap 文件中遇到了很多错误(在缓存反序列化步骤中,即使我在 db 导出/导入之前和之后清除了所有缓存)并且看起来某些 utf-8 编码被破坏了。
我知道最好的办法是在本地服务器上设置开发区域,但我需要我的客户从外部访问它。而且我们的 adsl 情况(静态 IP 等)有点连线。
任何想法?
ps:对不起我的英语不好,如果我的问题不够清楚,请告诉我,我会提供更多细节)