2013-03-20 79 views
0

我們最近用新的Ruby on Rails替換了舊的HTML網站。不幸的是,很多搜索引擎仍在尋找不再存在的'index.htm'等頁面。如何將缺少的* .htm頁面重定向到Rails中的已知頁面?

我們已經有這抓住不良網址,並給出了404的缺省路由,但對於網址哪一端以.htm,我寧願重定向到不同的頁面,而不是302

這就是我們目前使用一個捕獲所有:

match '*a', :to => 'errors#routing' 

我可以在上面添加什麼,以捕獲'index.htm'和其他任何* .htm?

回答

1

使用match '*a.htm' => redirect("/", :status => 302)

1

假設您的Rails路由與傳統路由相同(最後沒有.html),您應該可以在路由中添加可選的:format。退房defalt包羅萬象的路由定義:

match ':controller(/:action(/:id))(.:format)' 

的關鍵是(.:format)末。嘗試將其添加到其他路由,並且它應該可以使用舊版和非舊版網址。

+1

的任擇議定書要求匹配的* .htm,所以你需要添加像'約束:約束=> { :format =>/\ Ahtm \ Z /}' – 2013-03-20 19:18:14

0

我試過第一個解決方案,但沒有取得太大的成功。這工作得很好,但。

match '*a.htm', to: 'errors#redirect_to_home' 

在錯誤控制器:

# -*- encoding : utf-8 -*- 
class ErrorsController < ApplicationController 
    def routing 
    render_404 
    end 

    def redirect_to_home 
    redirect_to root_url 
    end 
end 
+0

也許嘗試'匹配'* a.htm'=>重定向(「/」)'http://guides.rubyonrails.org/routing.html#redirection – 2013-03-20 21:02:44

+0

那是否仍然給302狀態? – Simmo 2013-03-20 21:10:02

+1

哎呀,忘了302.默認情況下,重定向以301狀態返回,但您可以覆蓋:'match'* a.htm'=>重定向(「/」,:status => 302)' – 2013-03-21 02:58:53