如何在ColdFusion中获取基本URL

时间:2018-02-22 11:47:10

标签: coldfusion

我只想获取cfm页面的URL路径。例如,如果我的网址与http://125.145.23.65/test/login.cfm类似,我需要http://125.145.23.65/test/

如果网址与https://localhost:8500/CFIDE/administrator/index.cfm类似,我需要https://localhost:8500/CFIDE/administrator/

如何获得这个?

4 个答案:

答案 0 :(得分:5)

请注意,如果网站位于执行SSL卸载的负载均衡器后面,则SERVER_PORT_SECURE的值将为0。在这种情况下,负载均衡器可能会写入其他标头,CGI.X_FORWARDED_PROTO等等。

这些有点标准,但它依赖于供应商。

X-Forwarded-For,X-Forwarded-Proto,X-Forwarded-Port

<cfscript>
baseUrl='http#iif(CGI.SERVER_PORT_SECURE,"s","")#://#CGI.SERVER_NAME##getDirectoryFromPath(cgi.SCRIPT_NAME)#';
writeOutput(baseUrl);
</cfscript>

答案 1 :(得分:1)

试一试。

<cfset varUrl = cgi.request_url>
<cfset varUrlArr = listToArray(varUrl,'/')>
<cfset x = arrayDeleteAt(varUrlArr, len(varUrlArr))>
<cfset varNewUrl = arrayToList(varUrlArr,'/')>
<cfdump var="#varNewUrl#/">

答案 2 :(得分:0)

这可能是一种更好的方法,但在cgi范围内,SCRIPT_NAME和HTTP_URL会给你/test/login.cfm,HTTP_HOST和SERVER_NAME会给你125.145.23.65。如果您将SCRIPT_NAME或HTTP_URL视为带有/作为分隔符的列表,如dan所说,这

<cfoutput>#cgi.server_name##Replace(cgi.script_name,ListLast(cgi.script_name, "/"),"")#</cfoutput>

会给你;

125.145.23.65/test/

更新

所以,遵循dan的评论并使用ListDeleteAt,您可以使用;

<cfoutput>#cgi.server_name##ListDeleteAt(cgi.script_name,ListLen(cgi.script_name,"/"),"/")#/</cfoutput>

如果你需要知道它的http或https SERVER_PROTOCOL是否会告诉你

答案 3 :(得分:0)

由Steven Levithan编写的这个UDF非常擅长将URL / URI分解为各自的组件,然后您可以将它们重新组合成您需要的组件。

http://badassery.blogspot.com/2007/01/parsing-uris-in-coldfusion.html