我想弄清楚如何解析ColdFusion中的整个网址。
根据整个网址,我指的是一些链接 - http://subdomain.domainname.com/crm/leads/view/
我可以通过使用CGI.HTTP_HOST找出第一部分,它给了我 - subdomain.domainname.com。我无法弄清楚如何阅读URL的-crm / leads / view /部分。
我可以使用一个变量来读取它吗?我发现一些UDF会为我解析一个完整的字符串,但我需要能够将完整的URL传递给它。
我也在使用URL重写,因此使其复杂化。该网址可以是http://subdomain.domainname.com/crm/leads/view/,但提供的实际网页为http://subdomain.domainname.com/public/index.cfm。
我知道这是许多框架在所有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]
对此的任何反馈都会很棒。
谢谢!
答案 0 :(得分:1)
好的,我将根据上面的SES网址,您要尝试做的以及如何将其用于下面的CGI.PATH_INFO进行一些假设。
根目录,.htaccess文件:
RewriteEngine On
RewriteCond %{THE_REQUEST} /crm/([^?\ ]+)
RewriteRule ^.*$ /public/index.cfm/%1 [NC,L]
/ public目录。 .htaccess文件:
RewriteEngine Off
这将重定向到CGI.PATH_INFO,用于解析。继续阅读如何解析它。
当您使用搜索引擎安全(SES)URL时,您的键/值全部由正斜杠分隔,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#>
请记住,此答案假设您在CGI.PATH_INFO中有偶数个键/ val匹配。还要记住CF中的List *函数(在很多情况下)将丢弃一个空列表值,所以你可能认为你有一个偶数,你实际上没有。
扫描Adobe LiveDocs或cfquickdocs.com上的列表功能,查看您正在使用的列表功能是否具有可以传递的参数,这将导致它强制列表中的空列表值不被丢弃。其中一个功能是ListToArray()
。