0

我希望我正确地命名了这个问题,我会尝试解释我们正在努力实现的目标。

我们使用文件和目录模板构建了一个白标 Web 应用程序。

我们将此站点授权给可以通过 CSS 在其系统版本上拥有徽标和自定义颜色样式的客户。该网站对每个客户的工作方式完全相同。

每个站点/客户都有自己的数据库和 php 配置文件,以确定他们的数据库名称和少量信息(地址、联系信息等)。

我们已经有大约 12 个客户,但我们发现的问题是我们必须为每个客户复制所有文件和目录 - 进行小更新时非常困难,我们必须上传新站点 12 次。

为了在作品中添加另一个扳手,我们为每个客户设置了他们自己的 URL,并使用 htaccess 将他们引导到我们的目录。

所以...有没有办法为所有 12 个客户使用一个版本的网络应用程序文件和目录,但是如果他们去 www.customer1.com 我们可以加载一个 configuration.php 文件和 logo/css 和相同对于 www.customer2.com 等等?

它们都使用相同的模板文件,但 URL 决定加载哪个配置文件。

如果不清楚,我很抱歉,如果是,我会尝试进一步详细说明。

谢谢

4

2 回答 2

0

有一个很好的例子说明如何在这个网站上获取用户在 php 中请求的 URL:http ://www.phpro.org/examples/Get-Domain-Name-From-URL.html

<?php

function getDomain($url)
{
    if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED) === FALSE)
    {
        return false;
    }
    /*** get the url parts ***/
    $parts = parse_url($url);
    /*** return the host domain ***/
    return $parts['scheme'].'://'.$parts['host'];
}
?>

然后,您可以查看他们选择的站点,如下所示:

<?php
    //this next line from: http://stackoverflow.com/questions/6768793/php-get-the-full-url
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

    if (getDomain($url) = "customer1.com"){
        //Load config for customer 1
        //Perhaps also store this in some flag for loading custom css later.
    }
    if (getDomain($url) = "customer2.com"){
        //Load config for customer 2
        //etc...
    }

?>

但是,可能有更好的方法,因为这需要您为每个客户添加另一个 if 语句。

于 2013-08-29T08:27:19.960 回答
0

有几种可能的解决方案。

第一个解决方案:

我会使用所有站点都使用的共享目录,并在每个用户文件夹中只保留一个配置文件。

然后,新自定义的部署脚本将为除自定义文件之外的所有内容创建符号链接。您可能需要重构一些代码来执行此操作,而无需在部署脚本中编写数百个符号链接。

优点:

  • 每个用户都有一个单独的目录,只有用户自定义的代码位
  • 每个客户的定制很容易,因为您可以破坏符号链接,复制代码并修改它

缺点:

  • 去中心化定制检查

第二种解决方案:

路由所有用户使用相同的代码库,并根据 URL(例如customer1.mysite.com)设置一些配置变量。使您的站点根据该变量加载整个用户配置。

优点:

  • 对现有代码库几乎没有更改(取决于代码的编写方式)
  • 所有客户定制检查的集中位置。

缺点:

  • 为用户定制的代码将难以编写/维护

参考:

于 2013-08-29T08:21:48.307 回答