我正在“重命名”我正在处理的项目的现有文件。为了保持向后兼容性,我将保留一个cfm文件,以便将用户重定向到新用户。
为了尽可能保持一切清洁,我想在用户试图去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">
有没有理由使用另一种方法?
答案 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缓存重定向。