1

我正在 Rails 中建立一个网站来替换现有网站。在routes.rb我试图将一些旧 URL 重定向到它们的新等价物(一些 URL slug 正在发生变化,因此不可能使用动态解决方案。)

我的routes.rb样子是这样的:

  match "/index.php?page=contact-us" => redirect("/contact-us")
  match "/index.php?page=about-us" => redirect("/about-us")
  match "/index.php?page=committees" => redirect("/teams")

当我访问/index.php?page=contact-us时,我不会被重定向到/contact-us. 我已经确定这是因为 Rails 正在删除 get 变量并且只尝试匹配/index.php. 例如,如果我通过/index.php?page=contact-us以下路线,我将被重定向到/foobar

  match "/index.php?page=contact-us" => redirect("/contact-us")
  match "/index.php?page=about-us" => redirect("/about-us")
  match "/index.php?page=committees" => redirect("/teams")
  match "/index.php" => redirect("/foobar")

如何将 GET 变量保留在字符串中并以我想要的方式重定向旧 URL?Rails 是否为此提供了预期的机制?

4

1 回答 1

5

我有类似的情况,这就是我所做的:

通过一个操作创建一个处理重定向的控制器

RedirectController < ApplicationController
  def redirect_url
    if params[:page]
      redirect_to "/#{params[:page]}", :status => 301
    else
      raise 404 #how handle your 404
  end
end

在路线.rb

match "/index.php" => "redirect#redirect_url"
于 2012-07-04T16:41:48.663 回答