Redirect 301重定向的cflocation与cfheader

Redirect 301重定向的cflocation与cfheader,redirect,coldfusion,cflocation,Redirect,Coldfusion,Cflocation,我正在“重命名”我正在处理的项目的现有文件。为了保持向后兼容性,我将保留一个cfm文件,以便将用户重定向到新的cfm文件 buy.cfm:旧的 shop.cfm:新 为了保持一切尽可能干净,如果用户试图转到buy.cfm,我想发送301 statuscode响应 我知道我可以将cflocation与statuscode属性一起使用 <cflocation url="shop.cfm" statuscode="301" addtoken="false"> 有什么理由使用一种方法而

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

  • buy.cfm:旧的
  • shop.cfm:新
为了保持一切尽可能干净,如果用户试图转到buy.cfm,我想发送301 statuscode响应

我知道我可以将
cflocation
statuscode
属性一起使用

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

有什么理由使用一种方法而不是另一种方法吗?我认为他们做了同样的事情,
更具可读性

我在ColdFusion 9上测试了这一点。

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

从:

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

因此,您需要这样做:

<cfheader statuscode="301" statustext="Moved permanently">
<cfheader name="Location" value="http://www.example.com/shop.cfm">
<cfabort>
如果使用带有位置的cfheader标记,可能需要在中添加这些头,如果需要:

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


要详细说明Andy Tyrone的回答,虽然他们在某些情况下可能会做同样的事情,但CFHEADER方法可以让您更好地控制请求中传递的头。例如,如果您希望将缓存控制头发送到浏览器或内容交付网络,以便它们不会继续使用相同的旧重定向请求攻击您的服务器,这将非常有用。据我所知,没有办法告诉CFLocation缓存重定向。

同意。
cfheader
版本只是
cflocation
为您所做工作的手动版本。好的,再多读一点,看起来在CF8之前没有添加
statuscode
属性,因此,cfheader以前是专门返回statuscode的唯一方法。仅供参考-cflocation status code只接受300到307之间的值。因此,例如,如果需要返回新创建资源的位置以及201状态代码,则需要使用cfheader。
<cflocation url="shop.cfm" statuscode="301" addtoken="false">
Cache-Control: no-cache
Pragma: no-cache
<cfheader name="Cache-Control" value="no-cache"> 
<cfheader name="Pragma" value="no-cache">