cgi.SERVER_NAME恢复原点

问题描述:

我有两个版本的网站,一个用于西班牙语,一个用于英语。西班牙语子域通过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。任何见解?

如果您将它存储在应用程序作用域变量中,则用户可以更改变量中间请求。你没有在你的开发服务器上看到这个,因为你没有任何并发​​用户。

假设您有向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