cgi.SERVER_NAME 恢复原点

cgi.SERVER_NAME reverts origin

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

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

假设你有一个请求 en.website.com 然后 1 毫秒后请求 es.website.com 两个请求将共享相同的应用程序范围,第二个请求将更改 application.site 的值到 ES 版本。

更好的解决方案是为此使用请求范围变量,因为值因请求而异。

另一个不太优雅的解决方案是确保每个站点都有不同的应用程序名称,例如:

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

这会导致每个域都有自己的应用程序范围,这取决于您的 Web 服务器的设置方式可能会导致拒绝服务情况(如果您允许任何域访问该应用程序)。