Coldfusion动态URL

Coldfusion动态URL,coldfusion,coldfusion-8,Coldfusion,Coldfusion 8,我需要根据从数据库中获取的两个字段构建一个动态url。 第一个字段是mainCategory,第二个字段是subCategory 正在构建的URL看起来像 因为mainCategory和subCategory是动态的,所以我不确定代码需要什么 显示在页面上以使其正常工作 过于简化的答案可能是这样的: <cfquery name="getCats" datasource="dsn"> SELECT mainCategory, subCategory FROM myTable </

我需要根据从数据库中获取的两个字段构建一个动态url。 第一个字段是mainCategory,第二个字段是subCategory

正在构建的URL看起来像

因为mainCategory和subCategory是动态的,所以我不确定代码需要什么
显示在页面上以使其正常工作

过于简化的答案可能是这样的:

<cfquery name="getCats" datasource="dsn">
SELECT mainCategory, subCategory
FROM myTable
</cfquery>

<cfset newURL = "http://mydomain.com/cars/ford/mainCategory/#getCats.mainCategory#/subCategory/#getCats.subCategory#" />
在本例中,使用名为getCats的基本CFQUERY从数据库表“myTable”中选择两列。假设有结果,这两个值将被注入URL,我们将其保存到一个名为newURL的变量中,以便在代码的其他地方使用


这个例子实际上只能作为一般性的指导方针;您的问题中还有许多其他假设尚未澄清,需要解决,即数据库、表、DSN的名称、用户实际如何访问该URL等。这些假设未在本回答的范围内解决。

有几种方法可以解决。您可以在web服务器上使用URL重写来

进入

但如果您不介意index.cfm出现在URL中,也可以在ColdFusion中这样做:

如果要在ColdFusion中执行此操作,index.cfm之后的文本将被放入名为path_info的cgi变量中,您可以像这样解析:

<cfset mainCategory = "" />
<cfset subCategory = "" />

<cfset pathInfoString = reReplaceNoCase( trim( cgi.path_info ), ".+\.cfm/? *", "" ) />
<cfset pathInfoArray = listToArray( pathInfoString, "/" ) />

<cfif arrayLen( pathInfoArray ) gte 1>
    <cfset mainCategory = pathInfoArray[ 1 ] />
</cfif>
<cfif arrayLen( pathInfoArray ) gte 2>
    <cfset subCategory = pathInfoArray[ 2 ] />
</cfif>

您可以使用listGetAt而不是将其转换为数组,我只是更喜欢执行数组操作而不是列表操作。之所以会进行重新放置,是因为我认为在某些情况下,文件名会添加到路径信息的开头,但如果不是这样,您可能不需要这样做。

谢谢Shawn,但我想我需要回答的真正问题是,如何使用这样的动态url发送给第三方用户,以便他们能够看到相同的结果。所以,我想我需要以某种方式剖析或从url中提取cars和ford,并将其与表格进行比较。这是一个选择吗?现在我们有进展了。您需要分析/提取URL信息,这需要您分解/解析位置,b将这些值转换为适用于特定系统的信息,即将任意第三方URL变量映射到表示相同业务对象的特定变量,c将这些值传递到上述CFQUERY,这将允许您构建一个更符合您需求的动态URL。同样,你仍然缺少将URL反馈给用户的部分,不幸的是,需要更多的应用知识。你能澄清你问题的几个部分吗?汽车是主要类别,福特是次要类别吗?你是在问如何建立这个链接,或者当有人试图使用它时如何获取值?当有人试图使用它时如何获取值。这就是我的困境。不管它值多少钱,它通常被称为搜索引擎安全的URL。对的web搜索应该提供许多其他资源。是的,这似乎符合我的需要。转换成一种方式,我可以将它与表格进行比较,这样它就可以显示汽车和福特的所有结果。我只是使用了您发布的代码和cfoutput mainCategory和subCategory,但它没有返回任何内容。只是空白。在发布之前,我已经在ColdFusion 9中对此进行了测试,但我不认为有任何CF9特定的内容。我在temp.cfm中有代码,并使用temp.cfm/cars/ford。如果您转储了pathInfoArray或pathInfoString,您是否得到一个值?检查您的CGI.path\u信息中有什么。我不记得细节,但谷歌会。。。但有时,可能是CFMX7等旧版本的CF没有正确填充。使用mod_rewrite或同等软件将是处理此问题的最佳方法,而不是回到CF,IMO。