我已经在一个脚本上工作了几个星期调整它,因为需要在旧的coldfusion安装上跟踪CGI.script_PATH和CGI.REFERER,它有超过500个.cfc和.cfm页面。我只是在我的代码中遇到了麻烦。当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文件名和原始目录结构插入到DB表中,但在将/字符转换为\之前不会因为他们希望能够设置一个脚本,它将循环遍历表格并看到类似&#34; \ admin \ controls \&#34;并自动创建这些目录,然后将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 :(得分:1)
如果cgi.http_referrer变量不包含.cfm,则可以在referer_path变量上使用DirectoryExists函数。如果返回true,则可以使用DirectoryList函数或cfdirectory标记来搜索index.cfm或default.cfm的出现。
答案 1 :(得分:0)
他们可能会通过一个框架(如模型视图控制器)。不了解更多有关URL结构和命名约定的信息。
如果不知道更多,我会说你正在处理动态内容(特别是如果它通过index.cfm)。即使在500页的引擎中,也有一个唯一的标识符,应该是您的目标而不是文件。因此我们可以假设根本没有文件,我们只是根据您的URL查询字符串,局部变量和/或表单变量从这里和那里调用零件和片段。
所以桌子是你的朋友。检查您的URL结构,尝试分解参数,搜索这些参数的代码库,一旦找到构建页面的区域,然后在某处设置跟踪工具(页面请求流中的上游位置更高)。
也许有了一些代码片段,我们可以给你一个更准确的答案,但是现在至少应该让你看看你的代码库以寻找线索。