评估ColdFusion的目录路径我一直工作在脚本,针对一两个星期的调整它的需要是跟踪CGI.script_PATH和CGI.REFERER的是较旧的ColdFusion安装其中有超过500 .cfc和。 cfm页面。我只是在我的代码中遇到了一个障碍。当引用者是一个文件夹时,它不会在CGI.Referer变量中捕获页面名称。我相信,即使路径中没有包含实际的文件名,Coldfusion也会自动寻找index.cfm。文件的存在
如何在我的脚本中编写一个补充,如果CGI.Referer中没有.cfm,它可以搜索目录并捕获缺省文件集以加载或至少搜索index.cfm或default.cfm?
这里是代码处理引荐元件块:
<!---Variable declared and set to empty--->
<cfset referer_path_and_file = "">
<cfset referer_path = "">
<cfset referer_file_name = "">
<cfset script_path_and_file = "">
<cfset script_path = "">
<cfset script_file_name = "">
<cfif cgi.HTTP_REFERER neq ''>
<!--- all of this will fail if there is no referer, for instance, if they bookmark the page --->
<!--- cgi.HTTP_REFERER may contain URL parameters, so let's strip those --->
<cfset referer_path_and_file = ListFirst(CGI.HTTP_REFERER, "?")>
<!--- now let's get just the path, stripping out the web server info --->
<cfset referer_path = ListDeleteAt(CGI.HTTP_REFERER, ListLen(CGI.HTTP_REFERER, "/"), "/")>
<cfset referer_path = ReplaceNoCase(referer_path, "https", "", "All")>
<cfset referer_path = ReplaceNoCase(referer_path, "http", "", "All")>
<cfset referer_path = ReplaceNoCase(referer_path, "://machine1.fss.com", "", "All")>
<cfset referer_path = ReplaceNoCase(referer_path, "://www_dev.fss.com", "", "All")>
<cfset referer_path = ReplaceNoCase(referer_path, "://www.fss.com", "", "All")>
<cfset referer_path = ReplaceNoCase(referer_path, "://10.11.2.60/", "", "All")>
<cfset referer_path = referer_path & "/">
<cfset referer_path = ReplaceNoCase(referer_path, "/", "\", "All")>
<!--- now let's remove everything but the file name --->
<cfset referer_file_name = ListLast(referer_path_and_file, "/")>
<!--- and that leaves us with these variables set --->
<!--- referer_path_and_file = "#referer_path_and_file#"<br />
referer_path = "#referer_path#"<br />
referer_file_name = "#referer_file_name#"<br />
<br />--->
</cfif>
<!---Directory Stripping And Modifier Block Goes Here--->
<!---Set CGI System Variables--->
<cfset currentHeader = CGI.HTTP_REFERER >
<cfset currentScriptPage = CGI.SCRIPT_NAME >
<!---Set currentScriptPage as command line directory string and delcare new variable "reverseScriptPage"--->
<cfset reverseScriptPage = ReReplace(#currentScriptPage#, "/", "\","ALL")>
<!---Set reverseScriptPage value as newly format command line directory structure--->
<cfset newScriptPage = ListSetAt(#reverseScriptPage#, 1, "#reverseScriptPage#") >
代码只是去掉CGI脚本和他们的HTTP Web引用的引用者变量,然后去掉目录结构部分,并插入.CFM文件名和原始目录结构到数据库表,而不是之前扭转/字符\,因为他们希望能够设置一个脚本,这个脚本会遍历整个表格并看到类似“\ admin \ controls \”的内容并自动创建这些目录,然后将example.cfm页面复制到该目录中。其目的是1)确定应用程序中仍然使用了500个cfc/cfm文件中的哪一个,然后将它们和它们的目录结构复制到一个新的位置,并用非Coldfusion的新技术重新设计这些文件。
更新:我正在与我的代码的问题。当我测试它时,它运行良好,截断http域部分。然而,一旦它运行在Web服务器下,它不会截断url,尽管存在ReplaceNoCase方法:
在wwwroot根目录下的Web根目录下,它可以很好地输出: refererPage: testFiles.cfm refererPath = testCodes \ MVC
在直播现场我得到这个: refererPage:client_display refererPath:**:\ dev.fss.com \ admin_area ** 尽管有我在这行代码:
任何想法为什么?
请说明。在第一段你谈论的是CGI范围,第二段是URL范围。 –
你跟踪真实用户吗? CGI.HTTP_REFERER仅在遵循链接时设置。它也可能被诺顿网络安全特警阻止,所以你不能保证它会存在。 HTTP_REFERER不应受运行默认目录索引文件的影响。 –
_“我确定它与Coldfusion自动查找index.cfm有关,即使路径中不包含实际的文件名”_更像Web服务器的默认文件列表。 –