2017-08-17 61 views
0

對於搜索引擎優化的目的,我現在必須重定向一堆網址(類似200),也許更晚,也許更少。 我想輕鬆訪問它。所以我想過要有一個包含所有需要重定向的url的專用文件。 喜歡的東西從routes.rb重定向批量的網址

# 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映射這個文件在最高層。 這是一個很好的做法嗎?你怎麼看 ?我怎樣才能在我的routes.rb中處理這個邏輯。

+0

如果這些是靜態路徑,我會使用Rack中間件來處理它(而不是'routes.rb')。 – 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 

您也可以考慮使用庫:

0

你可以做到這一點在routes.rb中像這樣:

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

所以你並不需要創建大量的靜態路由和一個考驗將是足夠的,而不是寫一個靜態路由測試。

+0

謝謝你的回覆。我想將它放在專用的yml文件中,因爲我可以遍歷它並匹配潛在的重定向。 old_url和new_url之間沒有任何模式或特定的關係,我不想寫'get'/ old/path /:id',來:redirect('/ new_path _%{id}',status:301)'200次:) – flrnt