2011-10-26 24 views
5

我有一個ColdFusion應用程序。我希望能夠針對多個域或子域運行相同的代碼庫(而不是複製它)。每個網站將基本相同,除了它們將被打上品牌標籤,剝皮並且具有不同的標題等。如何在基於域或子域的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 ...

回答

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> 
+2

請記住,我可以編輯我的HOSTS文件,使dev.example.com指向您的生產IP,並且您的服務器可能認爲它正在運行dev版本。 –

+0

查看此博客文章,瞭解爲什麼我使用CGI.HTTP_HOST而不是CGI.SERVER_NAME http://www.n8williams。com/devblog/coldfusion/get-the-domain-from-the-request – speeves

+0

好點,CF Jedi Master!在我的情況下,這可能沒有關係,但是如果我運行某種代碼來暴露dev中的敏感信息(或者存在可被利用的bug),那麼顯然很重要。 – speeves

4

的應用實例是基於Application.name

,所以你只是名稱的每個實例不同

在的Application.cfc你可以有這樣的事情

<cfcomponent> 

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

每個域現在會導致不同nt應用程序名稱,因此單獨的實例和應用程序變量集合等。

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> 

現在每個請求具有網站模板可用througout。

我用這個來運行3個不同模板的3個電子商務網站關閉一個代碼庫和數據庫。

相關問題