2015-05-19 7 views
1

评估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 ** 尽管有我在这行代码:

任何想法为什么?

+0

请说明。在第一段你谈论的是CGI范围,第二段是URL范围。 –

+2

你跟踪真实用户吗? CGI.HTTP_REFERER仅在遵循链接时设置。它也可能被诺顿网络安全特警阻止,所以你不能保证它会存在。 HTTP_REFERER不应受运行默认目录索引文件的影响。 –

+1

_“我确定它与Coldfusion自动查找index.cfm有关,即使路径中不包含实际的文件名”_更像Web服务器的默认文件列表。 –

回答

0

它们可具有通过一个框架(如模型视图控制器)此去。不知道更多关于URL结构和命名约定。

而且不知道更多的,我会说你是在处理动态内容(尤其是如果它正在经历index.cfm)。即使在一个有500页的引擎中,也有一个唯一的标识符,它应该是你的目标而不是文件。所以我们可以假设根本没有文件,我们只是从这里到那里调用部分和片断,根据URL查询字符串,局部变量和/或表单变量来创建一个页面。

所以桌子是你的朋友。检查你的URL结构,尝试分解参数,在代码库中搜索这些参数,一旦你找到了构建页面的区域,然后在那里设置你的跟踪工具(在页面请求流中更高一点的上流)。

也许有一些代码片段,我们可以给你一个更准确的答案,但现在这应该至少让你看你的代码库的线索。

1

如果您的cgi.http_referrer变量不包含.cfm,则可以在referer_path变量上使用DirectoryExists函数。如果它返回true,则可以使用DirectoryList函数或cfdirectory标记来搜索index.cfm或default.cfm的出现次数。

相关问题