301重定向的cflocation vs cfheader

Joe*_*e C 8 coldfusion redirect cflocation

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

  • buy.cfm:老了
  • shop.cfm:new

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

我知道我可以使用cflocationstatuscode属性

<cflocation url="shop.cfm" statuscode="301" addtoken="false">
Run Code Online (Sandbox Code Playgroud)

或者我可以使用cfheader标签.

<cfheader statuscode="301" statustext="Moved permanently">
<cfheader name="Location" value="http://www.mysite.com/shop.cfm">
Run Code Online (Sandbox Code Playgroud)

是否有任何理由使用一种方法而不是另一种方法?

Hen*_*nry 12

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

  • 好了,多做一些阅读,看起来好像`statuscode`属性直到CF8才被添加,所以cfheader以前是唯一一种具体返回状态代码的方法. (3认同)

小智 6

我在ColdFusion 9上测试了这个.

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

Adobe ColdFusion文档:

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

所以你需要这样做:

<cfheader statuscode="301" statustext="Moved permanently">
<cfheader name="Location" value="http://www.example.com/shop.cfm">
<cfabort>
Run Code Online (Sandbox Code Playgroud)

得到相当于这个:

<cflocation url="shop.cfm" statuscode="301" addtoken="false">
Run Code Online (Sandbox Code Playgroud)

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

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

Cache-Control: no-cache
Pragma: no-cache
Run Code Online (Sandbox Code Playgroud)

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

<cfheader name="Cache-Control" value="no-cache"> 
<cfheader name="Pragma" value="no-cache">
Run Code Online (Sandbox Code Playgroud)