使用Coldfusion,如何处理动态生成的URL?

使用Coldfusion,如何处理动态生成的URL?,coldfusion,isapi-rewrite,application.cfc,Coldfusion,Isapi Rewrite,Application.cfc,(更新:我把这个问题转换成了一个社区维基,因为答案比我想象的更主观。根据一个人的需要有多个答案。) 如果我有一个只包含application.cfc和index.cfm的文件夹,那么处理动态生成的URL的快速、可靠的方法是什么?i、 e.没有相应物理.cfm文件的URL 此示例url生成404,但它应该在数据库中查找页面并通过index.cfm返回: http://www.myserver.com/cfdemo/mynewpage.cfm 我应该在application.cfc中使用来处理丢失

(更新:我把这个问题转换成了一个社区维基,因为答案比我想象的更主观。根据一个人的需要有多个答案。)

如果我有一个只包含application.cfc和index.cfm的文件夹,那么处理动态生成的URL的快速、可靠的方法是什么?i、 e.没有相应物理.cfm文件的URL

此示例url生成404,但它应该在数据库中查找页面并通过index.cfm返回:

http://www.myserver.com/cfdemo/mynewpage.cfm
我应该在application.cfc中使用来处理丢失的文件吗?由于此方法不处理onRequestStart()、onRequest()和onRequestEnd(),我想知道是否应该避免使用它

或者,我可以设置ISAPIRewrite规则,因为我使用的是IIS(或者Apache上的mod_rewrite)


这些方法是否合适,或者我是否错过了实现这一目标的更好方法?似乎Coldfusion应该在application.cfc中内置这种类型的功能。也许我只是错过了它。

如果你是为SES URL这样做的,我会提供两条建议

第一,随着时间的推移,它们的重要性越来越小。例如,谷歌认识到URL需要包含查询数据


第二:CF可以本机处理形式为hostname/file.cfm/param1/param2的SES URL。例如,雷·卡姆登的作品就是这样。在CF8中默认为打开,但需要在CF7中启用。我手头没有太多关于这方面的信息,但谷歌(或Bing,或其他任何东西)应该很容易找到它。

在web服务器级别重写url没有什么错。我对此投赞成票。

因为默认情况下,CF只处理cfm/cfc请求,所以您可以在应用程序开始时执行。cfc如下所示:

<cfif Right(cgi.SCRIPT_NAME, 9) NEQ "index.cfm">
    <!--- analyze the SCRIPT_NAME and start processing --->
</cfif>

如果您允许,我会尝试转换URL,如:

http://www.myserver.com/cfdemo/mynewpage.cfm
致:

这样您就不会丢失
onRequest
方法。第一种方法只能在Web服务器级别进行,因此在Apache或IIS中也是如此。第二个可以在冷熔合中完成。请参见:


否则,如果您必须在最后使用
.cfm
,则可以使用Apache或IIS中的URL重写包将其删除,然后将请求转发到cfm页面,或者使用MissingTemplate执行操作。我会尝试选择一种解决方案,它不会丢失onRequest的
方法,而是取决于您。

我肯定会选择URL重写。它不仅是一种更可预测、更通用的方法,而且还可以减少来自CF服务器的大量字符串解析负载。此外,它还导致CF处理对真实文件的请求,从而使您受益于onapplicationstart、onrequeststart和其他事件


顺便说一句,我个人总是发现像/index.cfm/foo/bar/这样的URL看起来很不专业,很有黑客味。此外,不以文件扩展名或尾随斜杠结尾的URL(如/foo/bar)在技术上是不正确的(至少根据旧式静态站点惯例),也应该避免。我还想知道Ben Doom从何处得到他的断言:“首先,随着时间的推移,它们的重要性越来越小。例如,谷歌认识到URL需要包含查询数据。”根据我的经验,我发现事实正好相反。

Hmm。。。。我的重写规则有点错误。如果我能找到解决方案,我会更新这篇文章。我修正了我的重写规则,并用IIRF 2.0(源代码:)对它们进行了测试。这是一个很好的信息,但不是SEO,我的需求来自将许许多多的旧静态.cfm/.html文件转换成数据库。我只需要几个.cfm文件作为从数据库中提取的内容的模板。我只需要弄清楚如何将所有这些遗留url请求重定向到处理请求的模板。谢谢非常聪明。我希望这是可能的解决办法。同意。进一步研究,并与application.cfc或其他Coldfusion解决方案进行比较。
<!--- trap 404 requests triggered by IIS --->
<cfif right(cgi.SCRIPT_NAME, 7) EQ "404.cfm">
    <cflog file="mylogfile" text="404 error triggered by IIS. Context: #cgi.QUERY_STRING#">
</cfif>
ErrorDocument 404 /404.cfm
http://www.myserver.com/cfdemo/mynewpage.cfm
http://www.myserver.com/cfdemo/mynewpage OR
http://www.myserver.com/index.cfm/cfdemo/mynewpage