Разобрать весь URL в ColdFusion - PullRequest
1 голос
/ 16 октября 2011

Я пытаюсь понять, как анализировать весь URL-адрес в ColdFusion.

Под полным URL я имею в виду что-то, связывающее это - http://subdomain.domainname.com/crm/leads/view/

Я могу понять первую часть, используя CGI.HTTP_HOST, который дает мне - subdomain.domainname.com. Я не могу понять, как читать - crm / приводит / посмотреть / часть URL.

Есть ли переменная, которую я могу использовать, чтобы прочитать это? Я нашел несколько UDF, которые будут анализировать для меня полную строку, но мне нужно иметь возможность передать ей полный URL.

Я также использую перезапись URL, что несколько усложняет. URL может быть http://subdomain.domainname.com/crm/leads/view/, но фактическая страница, которая обслуживает, является http://subdomain.domainname.com/public/index.cfm.

Я знаю, что так работает множество Frameworks, когда все URL-адреса направляются в файл, а затем он каким-то образом анализирует URL-адрес и направляет его на определенный контроллер и действие.

Вот копия моего файла .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.cfm [NC,L]

Любая обратная связь по этому поводу будет отличной.

Спасибо!

1 Ответ

1 голос
/ 16 октября 2011

Хорошо, я собираюсь сделать несколько предположений на основе приведенных выше URL-адресов SES, того, что вы пытаетесь сделать, и того, как разместить его в CGI.PATH_INFO ниже.

Корневой каталог,.htaccess файл:

RewriteEngine On
RewriteCond %{THE_REQUEST} /crm/([^?\ ]+) 
RewriteRule ^.*$ /public/index.cfm/%1 [NC,L]

/ публичный каталог.Файл .htaccess:

RewriteEngine Off

Это будет перенаправлено в CGI.PATH_INFO для анализа.Прочтите далее, как разобрать это.

Когда вы используете URL-адреса в поисковой системе (SES), где все ваши ключи / значения разделены прямой косой чертой, ColdFusion рассмотрит их в серверной переменной CGI.PATH_INFOобычно зарезервирован для каталогов.

Итак, зная это, используйте простой механизм извлечения для его анализа:

<cfset SESQueryString = CGI.PATH_INFO />

<cfset num_pairs = ListLen(SESQueryString,'/') />

<cfset keyVals = StructNew() />

<cfloop from="1" to="#num_pairs#" step="2" index="i">
     <cfset keyVals[ListGetAt(SESQueryString,i,'/')] = ListGetAt(SESQueryString,i+1,'/') />
</cfloop>

<cfdump var=#keyVals#>

Имейте в виду, что в этом ответе предполагается, что у вас четное число ключей /val соответствует в CGI.PATH_INFO.Также помните, что функции List * в CF будут (во многих случаях) выбрасывать пустое значение списка, поэтому вы можете подумать, что у вас есть четное число, а на самом деле его нет.

Сканирование функций списка в Adobe LiveDocsили cfquickdocs.com, чтобы узнать, есть ли у функции списка, с которой вы работаете, параметр, который вы можете передать, который заставит ее принудительно пустить пустые значения списка в вашем списке.Одной из таких функций является ListToArray().

...