如何在基于域或子域的ColdFusion中的相同代码库上运行多个站点

时间:2011-10-26 00:15:37

标签: coldfusion multiple-domains

我有一个ColdFusion应用程序。我希望能够针对多个域或子域运行相同的代码库(而不是复制它)。每个网站基本上是相同的,除了它们将被标记,剥皮并具有不同的标题等。

所以,我正在寻找的是如何:www.abc.com和www.xyz.com以及beta.mycompany.com都运行相同的代码库。理想情况下,当新客户登录时,可以快速添加新域名。

我已经看过PHP和Rails的这个问题,但不是CF.这就是我的想法(似乎有效),但想知道是否存在性能问题或更清晰的建议。

IN APPLICATION.CFC


    

<cfif cgi.server_name EQ "www.abc.com"  >
    <cfset request.client_id=1>
<cfelseif cgi.server_name EQ "www.xyz.com">
    <cfset request.client_id=2>
... etc             
<cfelse>
    This application not configured.
    <cfabort>   
</cfif>

现在,只需关闭client_id的所有内容......

3 个答案:

答案 0 :(得分:4)

应用程序实例基于Application.name

所以你只需要用不同的方式命名每个实例

在application.cfc中你可以有这样的东西

<cfcomponent>

    <cfset this.name = replace(CGI.HTTP_HOST, '.', '', 'all') />

现在,每个域都会生成不同的应用程序名称,从而分离实例和应用程序变量集等。

答案 1 :(得分:3)

我做了类似的事情,但我将所有信息保存在数据库中。这使得添加新网站变得更加容易,并且不需要为每个新客户端或模板进行任何代码更改。

来自application.cfc的代码:

<cffunction name="OnApplicationStart">
  <cfset application.websites = structNew()>

  <cfquery name="sites">
    SELECT websiteID, url FROM websites
  </cfquery>

  <cfloop query="sites">
    <cfset application.websites["#url#"] = CreateObject("component", "websites").init(websiteID)>
  </cfloop>
</cffunction>

现在我有一组应用程序配置为响应的网站。每个站点都加载其模板。模板也保存在数据库中,因此可以轻松地将每个站点配置为任何模板。

对于每个请求,我们只需要找到正确的网站:

<cffunction name="OnRequestStart">
  <cfargument name="targetPage">

  <cfif structKeyExists(application.websites, cgi.SERVER_NAME)>
    <cfset request.website= application.websites["#cgi.SERVER_NAME#"]>
  <cfelse>
    <cfabort>
  </cfif>

  <cfset request.template = request.website.template>
</cffunction>

现在每个请求都有可用的网站和模板。

我用这个来运行3个电子商务网站,其中3个不同的模板来自一个代码库和数据库。

答案 2 :(得分:2)

是的,那会有用。我将它扔进我的Application.cfc。我用它来为DEV和PROD设置不同的应用程序变量。

的Application.cfc:

     <CFIF not CGI.HTTP_HOST EQ "www.example.com" AND not CGI.HTTP_HOST EQ "example.com">
       <CFSET Application.Environment = "Dev">
       ...
     <CFELSE>
       <CFSET Application.Environment = "Prod">
       ...             
     </CFIF>