2013-03-20 77 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