我只想获取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/
如何获得这个?
答案 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