Rails:将所有未知路由重定向到root_url

时间:2010-11-09 09:16:11

标签: ruby-on-rails redirect routing routes url-routing

每当用户点击错误页面时,rails都会显示公共文件夹中的404.html。但是,我只想将浏览器重定向到根页面,而不显示任何内容。所以我尝试了通配,但无济于事,它仍然显示404页面。这是我的路线文件的摘录:

# ...
map.root :controller => 'home', :action => 'home'
map.connect '*', :controller => 'home', :action => 'home'

有什么建议吗?谢谢,伙计们!

5 个答案:

答案 0 :(得分:74)

如果您的项目由rails 3供电,请将此行添加到您的routes.rb

match '*path' => redirect('/')

编辑:如果您使用的是Rails 4或5

match '*path' => redirect('/'), via: :get

get '*path' => redirect('/')

答案 1 :(得分:19)

就像Arkan的回答一样。有一点,如果在开发环境中不想要这种行为,那么可以做 -

match '*path' => redirect('/')   unless Rails.env.development?

答案 2 :(得分:10)

Rails 4 -

(的的routes.rb

您仍然可以使用简单的get重定向所有未知路由。

  get '*path', to: 'home#index'

如果您希望为POST和GET请求提供路由,您仍然可以使用匹配,但Rails希望您通过via指定请求方法。

  match "*path" => "home#index", via: [:get, :post]  

请记住,routes.rb是按顺序执行的(匹配适合所提供路径结构的第一条路径),因此请在匹配项的底部放置通配符。

答案 3 :(得分:1)

你需要创建一个控制器才能做到这一点

class RedirectsController 

  def index
    redirect_to root_url
  end
end

在您的路线中

map.connect '*', :controller => 'redirects', :action => 'index'

答案 4 :(得分:1)

rails 5.2中似乎存在一个错误,其中catch_all路线拾取了active_storage路线,导致指向已上传图像的链接断开。该问题已在github上的rails回购中报告,并且有人用以下修补程序发表了评论,直到该错误在新版本中得到修复为止:

routes.rbend

get '*all', to: 'application#index', constraints: lambda { |req|
    req.path.exclude? 'rails/active_storage'
  }

然后在应用程序控制器中添加:

def index
  flash.notice = 'No page found at that address'
  redirect_to root_path
end