2015-03-13 73 views
1

我有兩個版本的網站,一個用於西班牙語,一個用於英語。西班牙語子域通過IIS和C名稱設置(網絡管理員告訴我,我不知道如何或意味着什麼),它不是一個單獨的子域。cgi.SERVER_NAME恢復原點

es.website.com 
en.website.com 

現在,當我在我的開發服務器上使用CGI.SERVER_NAME時,一切正常。然而,在生產中,當我在es.website.com上時,儘管我的Application.cfc設置,它認爲來源是en.website.com,它拋出我的<cfheader name="Access-Control-Allow-Origin" value="#application.site#">

這是我如何區分域和站點,以確定哪些內容必須以西班牙文:

application.subdomain = ListFirst(cgi.SERVER_NAME, "."); 
if (application.test) { 
    if (application.subdomain == "en") { 
     application.site = "http://en.dev.website.com/"; 
    } else { 
     application.site = "http://es.dev.website.com/"; 
    } 
} else { 
    if (application.subdomain == "en") { 
     application.site = "http://en.website.com/"; 
    } else { 
     application.site = "http://es.website.com/"; 
    } 
} 

我想不通爲什麼當其他頁面上,application.sites顯然es.website.com,但對一些頁面,cgi.server_name恢復爲en.website.com。任何見解?

回答

10

如果您將它存儲在應用程序作用域變量中,則用戶可以更改變量中間請求。你沒有在你的開發服務器上看到這個,因爲你沒有任何併發​​用戶。

假設您有向en.website.com的請求,那麼1毫秒後,對es.website.com的請求將共享相同的應用程序範圍,第二個請求將將application.site的值更改爲ES版。

更好的解決方案是使用請求作用域變量,因爲值根據請求而不同。

另一個不那麼優雅的解決辦法是,以確保每個站點都有一個不同的應用程序名稱,例如:

this.name = LCase(cgi.server_name) & "_website"; 

,會導致每個域都有自己的應用範圍,這取決於如何在Web服務器上設置可能會導致拒絕服務條件(如果您允許任何域名擊中應用程序)。

+1

這使得總體感覺! – 2015-03-13 18:18:57