2013-04-08 52 views
5

tôi thêm sên đến một số các mô hình, nhưng vì SEO tôi cần phải làm 301 từ các liên kết cũ: cũ:Ruby on Rails 301

http://host.com/foo/1 

mới:

http://host.com/foo/foo_slug 

câu hỏi: cách triển khai chuyển hướng 301 trong trường hợp này? và có thể triển khai chuyển hướng 301 từ liên kết phía trên không? Như thế này:

http://host.com/foo/FOO_SLUG -> http://host.com/foo/foo_slug 

Trả lời

13

Bạn sẽ có thể chuyển hướng với tình trạng 301 bằng cách thêm này để hành động điều khiển của bạn:

redirect_to "http://host.com/foo/foo_slug", :status => 301 

Xem tài liệu API cho redirect_to để biết chi tiết.

Và sẽ không có vấn đề gì với việc chuyển hướng URL được lồng ghép lên các phiên bản thấp hơn, mặc dù điều này có thể được xử lý tốt hơn bởi một cái gì đó ở lớp máy chủ HTTP như quy tắc Apache mod_rewrite.

+0

.. hoặc cấu hình nginx. hành khách dường như phổ biến hơn trên nginx – scones

+0

Cảm ơn bạn đã trả lời, Rails 3 cho phép tạo 301 chuyển hướng trực tiếp từ routes.rb, tốt hơn là làm điều đó trong bộ điều khiển hoặc trong các tuyến đường? – xamenrax

+1

Trong trường hợp của bạn, tôi nghĩ rằng bạn sẽ phải làm điều đó trong hành động điều khiển, vì tôi giả sử bạn sẽ tìm kiếm các slug từ một cơ sở dữ liệu? Nếu vậy, mã để tìm kiếm một bản ghi và tìm slug của nó chỉ có thể xảy ra trong một hành động điều khiển, không phải trong 'routes.rb' –

2

Đối với 301 viết mã này trong điều khiển của bạn:

tiêu đề [ "Tình trạng"] = "301 Moved Permanently"

redirect_to "http://host.com/foo/foo_slug" # trong trường hợp của bạn

Và đối với câu hỏi thứ hai , sử dụng viết hoa hoặc viết hoa nếu bạn đã đề cập url hardcode.

Nếu không, hãy sử dụng nội suy ruby ​​bằng cách đặt toàn bộ url vào chuỗi

+0

Thay vì mã cứng tiêu đề 'Trạng thái', tại sao không chỉ chuyển': status => 301' và để Rails xử lý định dạng tiêu đề đó (xem câu trả lời của tôi cho ví dụ) –

+0

có, đó là tùy chọn khác. cảm ơn –