处理从旧永久链接到新永久链接的重定向

Handling a redirect from an old permalink to a new one

我的 rails 4 应用程序中有一个页面模型。它有一个 :permalink 属性,当有人访问 "mysite.com/pages/page-name" 时,控制器会找到带有 "page-name" 的页面作为永久链接,然后显示视图。

pages_controller.rb:

def show
  @page = Page.find_by_permalink!(params[:id])
end

网站上线几个月后,我想更改某个页面的永久链接,但我不想丢失所有传入链接。我想我会这样做。

首先我会 add_colum :new_permalink 到 Page 模型。然后,如果此 :new_permalink 属性不是 nil 或空白,它将在控制器中拉出一个新页面,如下所示:

def show
  @page = Page.find_by_permalink!(params[:id])
  if !@page.new_permalink.blank?
    @page = Page.find_by_permalink!(@page.new_permalink)
  end
end

这有效,但浏览器中的 url 仍然显示旧的 URL。我想这可能还不错,但我想我希望它能真正转发到新页面。也许,而不是 "new_permalink" 它应该是一个新的 url 并实际进行重定向?你最好的解决方案是什么?我可以将其设为 301 重定向吗?

是的,您应该使用 301 重定向,这样用户和搜索引擎都会将浏览器发送到正确的位置。

def show
  @page = Page.find_by_permalink!(params[:id])
  if @page.new_permalink.present?
    redirect_to page_path(@page.new_permalink), status: :moved_permanently
    return
  end
end