【发布时间】:2010-05-08 11:28:29
【问题描述】:
我们有一个在 Linux/Apache 上运行的自定义 PHP/MySQL CMS,它已推广到同一服务器上的多个站点 (20+)。每个站点都使用完全相同的 CMS 文件,每个站点都有一些自定义文件。
每个站点的自定义文件是:
/library/mysql_connect.php
/public_html/css/*
/public_html/ftparea/*
/public_html/images/*
/public_html/includes/ 中还有一些其他随机文件,每个站点都是独一无二的。除此之外,服务器上的每个站点都使用完全相同的文件。每个站点都位于/home/username/ 内。这里显然有大量的复制,因为每次我们想要部署系统更新时,我们都需要更新到每个用户帐户。鉴于公共站点文件都存储在 SVN 中,如果我们能够简单地提交到 SVN 并直接从那里部署到单个位置,那将更有意义。不幸的是,在这个阶段进行重大的架构更改可能会有问题。在我看来,理想的情况是创建一个像/home/commonfiles/ 这样的帐户,并且每个站点都使用这些公共文件,除非存在特定于帐户的文件,例如向/home/user/public_html/index.php 发出请求,但由于该文件不存在,因此请求被重定向到/home/commonfiles/public_html/index.php。我知道这种方法通常是可行的,类似于 Zend Framework(可能还有其他)如何将所有与特定文件不匹配的请求重定向到 index.php。我只是不确定如何确切地实施它以及它是否真的可取。真的很欢迎人们提出任何意见/想法。
编辑 AllenJB 的评论提醒我,我们之前曾探索过 AliasMatch 作为解决此问题的潜在解决方案,我们最终为一个看起来像这样的用户生成了一个 general.conf 文件:
php_admin_value open_basedir "/home/commonfi:/home/usertes:/usr/lib/php:/usr/local/lib/php:/tmp"
php_admin_value include_path "/home/commonfi"
AliasMatch (.*).php /home/commonfi/public_html/$1.php
AliasMatch (.*).html /home/commonfi/public_html/$1.html
【问题讨论】:
-
AliasMatch 不会解决文件系统级别的问题(因为 PHP 包含这样的问题),如果我没记错的话,它和符号链接一样不灵活,不是吗?跨度>
-
@Pekka 我们实际上有一个测试站点使用这种配置,因为系统中包含的每个文件都以包含路径为前缀,然后定义如下
define('SITE_ROOT','/home/commonfi') -
啊,我明白了!这听起来不是很好吗?
标签: php linux apache deployment