1

既存の Web サイトを置き換えるために、Rails で Web サイトを構築しています。古い URL の一部を新しい同等の URLにroutes.rbリダイレクトしようとしています (一部の URL スラッグは変更されているため、動的な解決策は不可能です)。

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

私も同様の状況にありました、これは私がしたことです:

1つのアクションでリダイレクトを処理するコントローラーを作成します

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 に答える