2015-05-19 1 views
1

Я работаю над скриптом в течение нескольких недель, настраивая его, как нужно, чтобы отслеживать CGI.script_PATH и CGI.REFERER на старой установке coldfusion, которая имеет более 500 .cfc и. cfm страниц. Я просто попал в мой код. Он не фиксирует имя страницы в переменной CGI.Referer, если референт является папкой. Я уверен, что это имеет какое-то отношение к Coldfusion, автоматически ищущему index.cfm, даже если путь не содержит фактического имени файла.Оценка пути к каталогу Coldfusion для существования файла

Как написать дополнение к моему скрипту, где, если в 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#") > 

Код просто набрасывает CGI-скрипт и переменные-рефертеры из их ссылок на веб-страницы http, а затем разбивает часть структуры каталогов и вставляет имя файла .cfm и исходную структуру каталога в таблицу DB, но не до того, как он изменит/символы на \, потому что они хотят настроить сценарий, который будет проходить через таблицу и увидеть что-то вроде «\ admin \ controls \» и автоматически создать эти каталоги, а затем скопировать страницу example.cfm в этот каталог. Цель состоит в том, чтобы: 1.) определить, какой из 500 файлов cfc/cfm все еще используется в приложении, затем скопировать их и структуру их каталогов в новое место и перепроектировать эти файлы в новой технологии, которая не является Coldfusion.

Обновление: у меня возникает проблема с моим кодом. Когда я тестирую его, он работает хорошо, обрезая часть домена http. Однако, как только он работает под веб-сервером, он не усекает URL-адрес, несмотря на то, что для этого существует метод ReplaceNoCase:

Под корнем веб-сайта в корне wwwroot он хорошо работает, давая этот вывод: refererPage: testFiles.cfm refererPath = testCodes \ MVC

Под живой сайт я получаю это: refererPage: client_display refererPath: **: \ dev.fss.com \ admin_area ** , несмотря на эту строку в своем коде:

Любая идея, почему?

+0

Просьба уточнить. В первом абзаце вы говорите о области cgi, а во втором - в области URL. –

+2

Вы отслеживаете реальных пользователей? CGI.HTTP_REFERER устанавливается только после ссылки. Он также может быть заблокирован такими вещами, как Norton Internet Security, поэтому вы не можете гарантировать, что он будет существовать. HTTP_REFERER не должен зависеть от запуска файла индекса каталога по умолчанию. –

+1

_ «Я уверен, что это имеет какое-то отношение к Coldfusion, автоматически ищущему index.cfm, даже если путь не содержит фактического имени файла». Больше похоже на список файлов по умолчанию для веб-сервера. –

ответ

0

они могут проходить через каркас (например, контроллер модели). Не зная больше о структурах URL и соглашениях об именах.

И, не зная больше, я бы сказал, что вы имеете дело с динамическим контентом (особенно если он проходит через index.cfm). Даже в двигателе с 500 страницами есть уникальный идентификатор, который должен быть вашей целью не файлом. Таким образом, мы можем предположить, что файлов вообще нет, и мы просто вызываем части и части отсюда и там, чтобы создать страницу, основанную на вашей querystring URL-адресе, локальных переменных и/или переменных формы.

Настольные таблицы - ваши друзья.Изучите структуру URL-адресов, попытайтесь разбить параметры, найдите базу кода для этих параметров, и как только вы разместите область, которая создает страницы, а затем где-то там установили инструменты отслеживания (немного более высокий поток в потоке запросов страницы).

Возможно, с некоторыми фрагментами кода мы можем дать вам более точный ответ, но на данный момент это должно по крайней мере заставить вас взглянуть на вашу базу кода для подсказок.

1

Если переменная cgi.http_referrer не содержит .cfm, вы можете использовать функцию DirectoryExists в переменной referer_path. Если он возвращает true, вы можете использовать функцию DirectoryList или тег cfdirectory для поиска вхождения index.cfm или default.cfm.