2013-01-23 27 views
8

Tôi đang "đổi tên" một tệp hiện có cho một dự án mà tôi đang làm việc. Để duy trì khả năng tương thích ngược, tôi sẽ để lại một tệp cfm để chuyển hướng người dùng sang tệp mới.cflocation vs cfheader cho 301 chuyển hướng

  • buy.cfm: cũ
  • shop.cfm: mới

Để giữ cho mọi thứ càng sạch càng tốt, tôi muốn lấy nội dung trả 301 statusCode nếu người dùng cố gắng đi đến buy.cfm.

tôi biết rằng tôi có thể sử dụng một trong hai cflocation với statuscode thuộc tính

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

hoặc tôi có thể sử dụng cfheader thẻ.

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

Có bất kỳ lý do nào để sử dụng một phương pháp này cho phương pháp khác không?

Trả lời

11

tôi nghĩ rằng họ làm điều tương tự, với <cflocation> là dễ đọc hơn

+1

Đồng ý với Henry. Phiên bản 'cfheader' chỉ đơn giản là phiên bản thủ công của những gì' cflocation' làm cho bạn. –

+3

OK, đọc nhiều hơn một chút, có vẻ như thuộc tính 'statuscode' không được thêm vào cho đến CF8, vì vậy cfheader trước đây là cách duy nhất để trả lại mã trạng thái một cách cụ thể. –

+1

FYI - mã trạng thái cflocation chỉ chấp nhận các giá trị từ 300 đến 307. Vì vậy, nếu, ví dụ:, bạn cần trả lại vị trí của tài nguyên mới được tạo cùng với mã trạng thái 201 bạn sẽ cần sử dụng cfheader. –

4

tôi thử nghiệm này trên ColdFusion 9.

Có một sự khác biệt lớn, và nó là cflocation mà dừng thực hiện các và sau đó chuyển hướng đến tài nguyên được chỉ định.

Từ Adobe ColdFusion documentation:

Dừng thực hiện các trang hiện tại và mở ra một trang ColdFusion hoặc tập tin HTML.

Vì vậy, bạn sẽ cần phải làm điều này:

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

để có được tương đương với điều này:

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

Nếu không, bạn có nguy cơ chạy vào các vấn đề nếu mã khác chạy sau thẻ cfheader . Tôi đã xem xét điều này khi sửa một số mã nơi các chuyển hướng được chèn vào tệp application.cfm - sử dụng cfheader - mà không hủy bỏ phần còn lại của quá trình xử lý trang.

Tôi cũng nhận thấy, trong các tiêu đề phản ứng, cflocation đó cũng đặt ra các tiêu đề sau cho phù hợp:

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

Người ta có thể muốn thêm các tiêu đề trong khi sử dụng thẻ cfheader với Vị trí, nếu cần thiết:

<cfheader name="Cache-Control" value="no-cache"> 
<cfheader name="Pragma" value="no-cache"> 
Các vấn đề liên quan