301重定向的cflocation vs cfheader

时间:2013-01-23 05:00:29

标签: redirect coldfusion cflocation

我正在“重命名”我正在处理的项目的现有文件。为了保持向后兼容性,我将保留一个cfm文件,以便将用户重定向到新用户。

  • buy.cfm:old
  • shop.cfm:new

为了尽可能保持一切清洁,我想在用户试图去buy.cfm时发送301状态码响应。

我知道我可以使用cflocation statuscode属性

<cflocation url="shop.cfm" statuscode="301" addtoken="false">

或者我可以使用cfheader代码。

<cfheader statuscode="301" statustext="Moved permanently">
<cfheader name="Location" value="http://www.mysite.com/shop.cfm">

有没有理由使用另一种方法?

3 个答案:

答案 0 :(得分:12)

我认为他们做同样的事情,<cflocation>更具可读性

答案 1 :(得分:6)

我在ColdFusion 9上进行了测试。

有一个主要区别,就是cflocation停止执行页面然后重定向到指定的资源。

来自Adobe ColdFusion documentation

  

停止执行当前页面并打开ColdFusion页面或   HTML文件。

所以你需要这样做:

<cfheader statuscode="301" statustext="Moved permanently">
<cfheader name="Location" value="http://www.example.com/shop.cfm">
<cfabort>

得到相当于:

<cflocation url="shop.cfm" statuscode="301" addtoken="false">

否则,如果在cfheader标记之后运行其他代码,则可能会遇到问题。我在修复一些代码时遇到了这种情况,其中重定向被插入到application.cfm文件中 - 使用cfheader - 而不会中止其余的页面处理。

我还注意到,在响应标头中,cflocation还相应地设置了以下标头:

Cache-Control: no-cache
Pragma: no-cache

如果需要使用带有位置的cfheader标记,可能需要添加这些标头:

<cfheader name="Cache-Control" value="no-cache"> 
<cfheader name="Pragma" value="no-cache">

答案 2 :(得分:0)

为了详细说明Andy Tyrone的Answer,尽管他们在某些情况下可以做相同的事情,但CFHEADER方法可让您对请求中传递的标头有更多控制。例如,如果要将缓存控制标头发送到浏览器或内容传递网络,以使它们不会继续使用相同的旧重定向请求来访问您的服务器,这将变得很有用。 (据我所知)没有办法告诉CFLocation缓存重定向。