我有两个版本的网站,一个用于西班牙语,一个用于英语。西班牙语子域名是通过IIS和C名称设置的(网络管理员告诉我,我不确定这是什么意思或者意味着什么),它不是一个单独的子域名。
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。有什么见解吗?
答案 0 :(得分:10)
如果要将其存储在应用程序作用域变量中,则用户可以更改变量mid请求。您在开发服务器上看不到这一点,因为您没有任何并发用户。
假设您有en.website.com的请求,那么1毫秒后,对es.website.com的请求将共享相同的应用程序范围,第二个请求将application.site的值更改为ES版本
更好的解决方案是为此使用请求范围的变量,因为值因请求而异。
另一个不太优雅的解决方案是确保每个站点都有不同的应用程序名称,例如:
this.name = LCase(cgi.server_name) & "_website";
这将导致每个域都有自己的应用程序范围,这取决于您的Web服务器的设置方式可能导致拒绝服务条件(如果您允许任何域命中该应用程序)。