2013-04-08 14 views
5

私はモデルの一部にナメクジを追加しましたが、SEOの私は古いリンクから301リダイレクトを実行する必要があるため: 旧:Rubyの301リダイレクト

http://host.com/foo/1 

新しい:

http://host.com/foo/foo_slug 

質問: この場合301リダイレクトを実装する方法は? と大文字のリンクから301リダイレクトを実装することは可能ですか?

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

答えて

13

あなたのコントローラのアクションにこれを追加することで、ステータス301でリダイレクトすることができるはずです:このよう

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

詳細についてはredirect_toためのAPIドキュメントを参照してください。

大文字小文字のURLを小文字のバージョンにリダイレクトしても問題ありませんが、これはApache mod_rewriteルールなどのHTTPサーバーレイヤーで処理する方が効果的です。 301リダイレクトがあなたのコントローラにこのコードを書くために

+0

..またはnginx configに入れてルビ補間を使用してください。乗客はnginxでもっと普及しているようです – scones

+0

Rails 3はroutes.rbから301のリダイレクトを直接作成することができます。コントローラやルートで行う方が良いですか? – xamenrax

+1

私はあなたがデータベースからスラッグを探していると仮定しているので、あなたはコントローラのアクションでそれをしなければならないと思いますか?そうであれば、レコードを検索してそのスラッグを見つけるコードは、 'routes.rb'の中ではなく、コントローラアクション内でしか起こりません。 –

2

:あなたのケースで

ヘッダ[ "ステータス"] = "301永久に移動"

redirect_to "http://host.com/foo/foo_slug" #

そして、2番目の質問についてあなたがハードコードURLを言及していれば、大文字または小文字を使用してください。

それ以外の場合は、完全なURLを文字列

+0

'Status'ヘッダをハードコードするのではなく、':status => 301'を渡して、そのヘッダの書式設定を処理させてください(私の答えは例を参照してください) –

+0

はい、それは別のオプションです。ありがとう –