2017-08-17 3 views
0

SEOの目的では、私は今のところURLの束(200のようなもの)をリダイレクトする必要があります。 私はそれに簡単にアクセスしたいです。だから私はリダイレクトする必要があるすべてのURLを含む専用のファイルを持っていることを考えました。一番上に私のroutes.rbマッピングで、その後routes.rbからURLのバッチをリダイレクト

# config/seo_redirection_table.yml 

- old_path: '/old/path/1' 
    new_path: '/new_path_1' 
    status: 301 
- old_path: '/old/path/2' 
    new_path: '/new_path_2' 
    status: 301 

そして、このファイルのように 何か。 それは良い方法ですか?どう思いますか ?そして、私はこの論理を私のroutes.rbで処理することができます。

+0

これらが静的パスの場合は、(routes.rbの代わりに)Rackミドルウェアを使用します。 – Stefan

+0

@Stefan ymlにしたいと思っています – flrnt

+0

ミドルウェアはymlファイルからリダイレクトを読むことができます。 – Stefan

答えて

0

コードベース内でリダイレクトルールを使用する場合は、アプローチは問題ありません。ルールは、あなたがルートの作成時にそれらをロードすることができ、静的なので:

# config/routes.rb 

require 'yaml' 

Rails.application.routes.draw do 
    redirects = YAML.load_file('config/redirects.yml') 
    redirects.each do |rule| 
    get rule["old_path"], to: redirect(rule["new_path"], status: rule["status"]) 
    end 

    # other routes 
end 

また、ライブラリを使用して検討してください。

  • https://github.com/vigetlabs/redirector:負荷がデータベースから定義をリダイレクトラックミドルウェア。利点:コード変更なしでリダイレクションルールを更新することができます。
  • https://github.com/jtrupiano/rack-rewrite:ラックリダイレクトミドルウェア。リクエストをリダイレクトまたは書き直すことができます。
0

ので、同じようあなたはroutes.rbをでそれを行うことができます:

get '/old/path/:id', to: redirect('/new_path_%{id}', status: 301) 

ですから、スタティックルートの多くを作成する必要はありませんし、一つの試験は、スタティックルートのためのテストを書く代わりに十分でしょう。

+0

ご返信ありがとうございます。私はそれを繰り返し、可能性のあるリダイレクトにマッチすることができるので、専用のymlファイルに入れたい。 old_urlとnew​​_urlの間にパターンや特定の関係はありません。リダイレクト( '/ new_path _%{id}'、status:301) '200に' get/old/path /:id '時間: – flrnt

関連する問題