【发布时间】:2014-06-26 23:54:05
【问题描述】:
我使用以下来动态检测主机服务器。使其动态化的重要性在于,目前有太多的硬编码重定向,例如:
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>
然后在每个存在链接或重定向的页面上,我只需要使用:
#UseThisURL#/hr/index.cfm
我的问题是:
在应用程序中设置
#UseThisURL#的最佳方式在哪里? 我在 Linux 环境中使用 ColdFusion 10 和 Application.cfc。我应该将其设置为应用程序还是会话范围?
由于一切都将在应用程序或会话范围内,当用户在某个页面上空闲并且应用程序/会话范围已过期时,当用户单击链接时会产生错误吗?如何防止用户看到使用此技术导致的错误?请指教,谢谢!
【问题讨论】:
-
如果有帮助,cgi.server_name 应该有域,但更好的问题可能是你为什么要使用它?如果您只是进行重定向,为什么不使用来自 webroot 的相对 URL 或绝对 URL?所以重定向到 /my/new/path 而不是 example.com/my/new/path。这样它就与域无关并且更便携。
-
只需执行@SeanCoyne 指出的操作,无需额外代码或任何额外配置即可解决问题。无论运行代码的服务器如何,快速、简单、始终有效。