4

CF10 中的 REST 支持可否用于替代使用 URL Rewrite / ModRewrite 来实现对 SEO 友好的 URL?编写一个定义 GET 和 POST 方法的薄层,并且<cfinclude>在正确的页面中?

或者它会对服务器征税过多,最好让网络服务器处理?

一旦进入 CFML,版本控制和维护就会容易得多。

谢谢

4

3 回答 3

2

如果我明白你在说什么(也许我不明白),你会创建一个处理程序来拦截请求,解析变量,然后通过 REST 请求适当的页面?如果这就是您的想法,那么我不确定我是否会遵循您从中获得的收益。REST(一般来说)更像是一个用于获取方法的通用 HTTP API - 与其说是页面/内容范例(我认为它可能是)。

如果您正在寻找的是使用 CF 作为重写 SEO URL 处理程序,您现在可以这样做。要使用 IIS 示例,您可以创建一个“自定义 404”处理程序 - 一个 CFM 页面 - 获取所有未绑定到特定文档的请求。处理程序通过解析 URL 来梳理变量,然后“包含”正确的 cfm 代码或页面。这听起来有点像你想要的——但它并不是真正的 REST。

也许您正在考虑进行某种 CFHTTP 调用,通过从 URL 构造查询字符串来获取所需的内容。因此,如果有人加载如下网址:

blah.com/productid/550

你可以这样写代码 -

<cfhttp 
url="http://blah.com/index.cfm?#listfirst(cgi.script_name,'/')#=#listlast(cgi.script_name,'/')#"/>

<cfoutput>#cfhttp.filecontent#</cfoutput>

虽然这可以解决问题,但最好使用 cfinclude 而不是这种方法。像上面这样的方法实际上会为每个请求生成一个额外的线程——一个线程用于浏览器的请求,另一个用于 cfhttp 请求。

最后,我会礼貌地建议 URL 重写(在 apache 或 IIS 中)更有效且更“传统”,因此通常可能是更好的选择。

于 2012-03-29T01:47:27.203 回答
1

@Henry REST 不能替代 URL 重写。

首先,REST URL 有一个格式。

http://localhost:8500/rest/App_Name/Rest_Path

“休息”部分是强制性的。如果您想更改“rest”,您可以在 web.xml 中更改它(更改 URL 映射)。

App_Name 不是强制性的。服务器可以有一个默认的休息应用程序。对于默认应用程序,您不需要指定 AppName。要访问其他(非默认)rest 应用程序,您应该指定 AppName。您可以在管理员的 Rest Service 注册页面中将应用程序设为默认值。

Rest_Path 标识 CFC 和 CFC 中需要在 HTTP 调用上调用的函数。

如果这些 URL 格式是可接受的,那么这些格式的 URL 可以映射到 CFC 中的特定函数。每当对 URL 进行 HTTP 调用时,都会调用相应的 CFFunction。通过使用 REST,您可以访问 CFC 中的函数。无法以这种方式直接访问 CFC 或 CFM。但在函数中,您可以实现任何您想要的(如调用 CFC、调用另一个 CFM 等)。

此回复是否回答了您的问题?

谢谢,保罗

于 2012-04-16T13:01:22.080 回答
1

即使有人可以做到这一点,我也会说它选择了错误的工具来做错误的工作。URL 重写是 Web 服务器的工作,而不是 CF 服务器的工作,而且 Web 服务器在这方面会比 CF 好得多。CF 的 REST 接口用于构建 API,而不是用于进行 URL 重写。

如果使用 CF 处理 URL 重写,那么使用 404 处理程序或 onMissingTemplate() 处理程序将更适合这里,不是吗?至少您正在使用适合这项工作的工具(如果不是最好的工具)。

至于版本控制... .htaccess 文件只是一个文本文件,就像 CFML 文件一样。我没有仔细研究过 IIS 的重写模块,但它不能使用文本文件来配置/维护它的重写吗?显然 Apache 可以,我们使用 Helicon 的 ISAPI 重写模块,该模块使用与 mod_rewrite 兼容的 .htaccess 文件。

在我看来,您似乎正在尝试通过使用会降低生产性能的方法来简化开发人员的工作。“让开发人员的生活更轻松”绝不应该成为损害生产环境的理由(显然是 IMO)。

于 2012-05-16T05:54:52.060 回答