(更新:我将此问题转换为社区 wiki,因为答案似乎比我想象的更主观。根据自己的需要,有多个答案。)
如果我有一个仅包含 application.cfc 和 index.cfm 的文件夹,那么处理动态生成的 URL 的快速、可靠的方法是什么?即没有相应物理 .cfm 文件的 URL。
此示例 url 生成 404,但它应该在 db 中查找页面并通过 index.cfm 返回它:
http://www.myserver.com/cfdemo/mynewpage.cfm
我应该在 application.cfc 中使用onMissingTemplate()来处理丢失的文件吗?由于该方法不处理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 中内置这种类型的功能。也许我只是想念它。