评估文件存在的Coldfusion目录路径

我一直在编写一个脚本几个星期来调整它,因为需要跟踪一个具有超过500个.cfc和.cfm页面的旧Coldfusion安装CGI.script_PATH和CGI.REFERER。 我只是在我的代码中遇到了一个障碍。 当引用者是一个文件夹时,它不会在CGI.Referer变量中捕获页面名称。 我相信,即使路径中没有包含实际的文件名,Coldfusion也会自动寻找index.cfm。

如何在我的脚本中添加一个补充,如果CGI.Referer中没有.cfm,它可以搜索目录并捕获缺省文件集以加载或至少搜索index.cfm或default.cfm ?

以下是处理referer元素的代码块:

   <!---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#") >

该代码只是剥离其http Web引用的CGI脚本和引用变量,然后剥离目录结构部分并将.cfm文件名和原始目录结构插入到数据库表中,但是在将/字符反转为之前不能将它们因为他们想要为了能够设置一个脚本,它将遍历整个表并看到类似“ admin controls ”的内容并自动创建这些目录,然后将example.cfm页面复制到该目录中。 其目的是1)确定应用程序中仍然使用了500个cfc / cfm文件中的哪一个,然后将它们和它们的目录结构复制到一个新的位置,并用非Coldfusion的新技术重新设计这些文件。

更新:我遇到了我的代码问题。 当我测试它时,它运行良好,截断http域部分。 但是,一旦其运行在Web服务器下,尽管存在ReplaceNoCase方法,它仍不会截断url:

在wwwroot根的web根目录下,它可以很好地输出这个结果:refererPage:testFiles.cfm refererPath = testCodes MVC

在live网站下,我得到这个:refererPage:client_display refererPath:**: dev.fss.com admin_area **尽管在我的代码中有这行:

任何想法为什么?


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


他们可能会经历一个框架(如模型视图控制器)。 不知道更多关于URL结构和命名约定。

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

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

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

链接地址: http://www.djcxy.com/p/31217.html

上一篇: Evaluating Coldfusion directory path for file existence

下一篇: IIS7 doesn't redirect to index in localhost