(更新:我转换这个问题的社区维基的答案似乎比我想象的还要有取决于一个人需要多个答案更主观的)

如果我有一个文件夹仅包含的Application.cfc和index.cfm,什么是处理动态生成的URL的快速,可靠的方法是什么?即不具有对应的物理.CFM文件的URL。

此示例URL生成404,但它应该在一个分贝查找一个页面,并通过index.cfm返回它:

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

我应该使用 onMissingTemplate()中的Application.cfc处理丢失的文件?由于这种方法不处理onRequestStart(),onRequest()和onRequestEnd(),不知是否应该避免它。

可替换地,我可以设置一个ISAPIRewrite规则因为我使用IIS(或在Apache mod_rewrite的)

# IF the request is not /index.cfm, doesn't exist and ends in cfm or html,
# rewrite it. Pass the requested filename $1.$2 as the 1st param: cgi.page
# append the remaining url params $4 ($3 is the ?)
RewriteCond %{SCRIPT_NAME} ^(?!/index.cfm)(.*)$
RewriteCond %{REQUEST_FILENAME}     !-f
RewriteCond %{REQUEST_FILENAME}     !-d 
RewriteRule ^\/(.*)\.(cfm|html)(\??)(.*)$   /index.cfm?page=$1.$2&$4 [I,L]

难道这些方法适当,还是我失去了实现这一目标的更好的办法?看来,ColdFusion的应该有这种类型的内置到的Application.cfc功能。也许我只是失踪了。

有帮助吗?

解决方案

没有错,在Web服务器级别URL重写。我会投票支持这一点。

其他提示

由于CF在默认情况下只处理CFM / CFC请求,可以在的Application.cfc像这样一开始做的:

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

有关使用网络服务器的配置其它文件类型是我可以看到的唯一途径。但是,而不是创建重写规则,你可以尝试使用自定义的404处理器。至少使用IIS时,你就可以得到上下文cgi.QUERY_STRING,如果设置了虚拟页面,说的 404.cfm (它不需要存在),并把下面的检查< EM>前前面的示例:

<!--- 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>

对于Apache就可以使用下面的处理程序,但我不知道你是否可以提取在这种情况下上下文:

ErrorDocument 404 /404.cfm

如果你这样做了SES的网址,我会提供两点建议。

第一,他们不管少随着时间的推移。谷歌,例如,识别出的URL需要包括查询数据。

第二:CF可以本地处理SES网址的形式主机名/ file.cfm /参数1 / param2的。雷卡姆登的 BlogCFC ,例如,工作的方式。它是在默认情况下,CF8,但需要在CF7启用。我没有很多的相关信息,方便,但它应该很容易谷歌(或冰,或其他)。

如果你能允许的话,我想尝试URL转换,如:

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

为:

http://www.myserver.com/cfdemo/mynewpage OR
http://www.myserver.com/index.cfm/cfdemo/mynewpage

,这样你就不会失去onRequest方法。第一个只能在网络服务器级别上进行,所以在Apache或IIS。第二个可以在短短的ColdFusion来完成。看到这一点: http://www.cfcdeveloper.com /index.cfm/2007/4/7/Coldfusion-SES-URL

否则,如果你必须在最后有.cfm,您可以使用Apache或IIS的URL重写包剥离出来,然后将请求转发到CFM页面或做你与onMissingTemplate做什么。我会尽量选择不涉及不失onRequest方法解决,但给你。

我肯定会去的URL重写。它不仅将成为一个更可预测,但普遍的做法,但它会从CF服务器减少字符串解析负载的显著量。此外,它会导致CF处理到真正的文件的请求,从而让你onapplicationstart,onrequeststart和其他事件的好处。

像/index.cfm/foo/bar/顺便说一句,我个人总是发现的URL看起来unpro和hackish的。此外,网址(如/富/条),不在任何一个文件扩展名或斜线结尾在技术上是不正确的(按老派的静态站点约定至少是),并应可能会被避免。我也很好奇,其中奔死命得到他的说法,“首先是他们关系越来越少,随着时间的推移,谷歌,例如,认识到网址需要包括查询数据。”根据我的经验,我居然发现正好相反的是真实的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top