在ColdFusion 10中动态设置主机服务器的最佳方法
我使用以下命令动态检测主机服务器。使其动态化的重要性在于,目前存在太多硬编码重定向,例如:在ColdFusion 10中动态设置主机服务器的最佳方法,coldfusion,coldfusion-10,Coldfusion,Coldfusion 10,我使用以下命令动态检测主机服务器。使其动态化的重要性在于,目前存在太多硬编码重定向,例如: http:s//mysite.com/hr/index.cfm 在我的应用程序中。 当我从生产站点移动到开发站点,然后再返回生产站点时,我必须逐个手动更改/注释此http/https,这不仅耗时而且危险 下面是我发现的可以检测主机服务器的代码。然后,我做以下工作: <CFSET inet = CreateObject("java", "java.net.InetAddress")&g
http:s//mysite.com/hr/index.cfm
在我的应用程序中。
当我从生产站点移动到开发站点,然后再返回生产站点时,我必须逐个手动更改/注释此http/https,这不仅耗时而且危险
下面是我发现的可以检测主机服务器的代码。然后,我做以下工作:
<CFSET inet = CreateObject("java", "java.net.InetAddress")>
<CFSET inet = inet.getLocalHost()>
<CFSET HostServer = "#inet.getHostName()#">
<CFSET ThisHostServer = "#LEFT(HostServer,6)#">
<CFSWITCH expression="#Trim(ThisHostServer)#"><!--- Prod or Dev server --->
<CFCASE value="myprodsite.com">
<CFSET UseThisURL = "http://myprodsite.com">
</CFCASE>
<CFCASE value="mydevsite.com">
<CFSET UseThisURL = "http://myDevsite.com">
</CFCASE>
</CFSWITCH>
我的问题是:
#使用此URL#
的最佳方法是什么?
我正在Linux环境中使用ColdFusion 10和Application.cfc我使用的最佳实践是创建
config.cfc
,它可以包含像getServerSpecificVariables()
这样的函数来返回结构。此结构将保存在您的应用程序范围中,因为您不希望为每次会话启动创建USEThisURL
。当需要重置时,只需清除应用程序范围。在Application.cfc
范例
Config.cfc:
component{
public struct function getServerSpeceficVariables(){
var config = {};
var inet = CreateObject("java", "java.net.InetAddress");
inet = inet.getLocalHost();
HostServer = inet.getHostName();
ThisHostServer = LEFT(HostServer,6);
switch(Trim(ThisHostServer)){
case 'myprodsite.com':{
config.useThisURL = '';
break;
}
case 'mydevsite.com':{
config.useThisURL = '';
break;
}
}
return config;
}
}
如果有帮助的话,cgi.server_名称应该有这个域,但更好的问题可能是为什么要使用它?如果您只是做重定向,为什么不使用webroot的相对URL或绝对URL呢?因此,重定向到/my/new/path而不是。通过这种方式,它不依赖于域,并且更具可移植性。不需要额外的代码,也不需要任何额外的配置,只要按照@SeanCoyne所说的做就可以解决这个问题。无论代码运行在哪台服务器上,快速、简单都将始终有效。@Andi,我创建了config.cfc,但我不确定如何从ApplicationStart实例化和清除应用程序范围。我是CF新手,到目前为止还没有使用Application.cfc。我知道如何通过执行以下操作来实例化对象,但不在onApplicationStart中。我通常这样做:然后这是一个错误:以下是正确的代码:那么这是如何在OnApplicationStart中实例化的?OnApplicationStart我写过:在OnApplicationStart中,在项目中的任何地方引用变量都可以使用例如。。我遇到一个错误:在component/home/space/users/www/webdocsec/cfcomponents/GL/Config.cfc中找不到getServerSpecificVariables方法。我多次检查.cfc的路径和.cfc的名称(大写C)是否正确。我将我的Config.cfc放在cfcomponents文件夹下的GL子文件夹中,并在应用程序启动中引用它为:。
component{
public struct function getServerSpeceficVariables(){
var config = {};
var inet = CreateObject("java", "java.net.InetAddress");
inet = inet.getLocalHost();
HostServer = inet.getHostName();
ThisHostServer = LEFT(HostServer,6);
switch(Trim(ThisHostServer)){
case 'myprodsite.com':{
config.useThisURL = '';
break;
}
case 'mydevsite.com':{
config.useThisURL = '';
break;
}
}
return config;
}
}