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

Alb*_*ore 38 redirect routing routes ruby-on-rails url-routing

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

# ...
map.root :controller => 'home', :action => 'home'
map.connect '*', :controller => 'home', :action => 'home'
Run Code Online (Sandbox Code Playgroud)

有什么建议?多谢你们!

Ark*_*kan 75

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

match '*path' => redirect('/')
Run Code Online (Sandbox Code Playgroud)

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

match '*path' => redirect('/'), via: :get
Run Code Online (Sandbox Code Playgroud)

要么

get '*path' => redirect('/')
Run Code Online (Sandbox Code Playgroud)

  • 确保将其放在路线列表的底部. (5认同)

Sam*_*der 19

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

match '*path' => redirect('/')   unless Rails.env.development?
Run Code Online (Sandbox Code Playgroud)


use*_*ser 10

导轨4-

(routes.rb)

您仍然可以使用简单get方法重定向所有未知路由.

  get '*path', to: 'home#index'
Run Code Online (Sandbox Code Playgroud)

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

  match "*path" => "home#index", via: [:get, :post]  
Run Code Online (Sandbox Code Playgroud)

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


tom*_*omb 6

rails 5.2 中似乎存在一个错误,其中 active_storage 路由被 catchall 路由获取,导致上传图像的链接断开。该问题已在 github 上的 rails repo 中报告,并且有人评论了以下补丁,直到该错误在新版本中得到修复:

routes.rb去年前右end

get '*all', to: 'application#index', constraints: lambda { |req|
    req.path.exclude? 'rails/active_storage'
  }
Run Code Online (Sandbox Code Playgroud)

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

def index
  flash.notice = 'No page found at that address'
  redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)

  • 此外,您可以在应用程序初始化后添加包罗万象的路由,如下所述:https://github.com/rails/rails/issues/671#issuecomment-1780159 (2认同)