Rails: redirect all unknown routes to root_url

99封情书 提交于 2019-11-26 12:02:28

问题


Whenever a user hits the wrong page, rails shows 404.html from the public folder. However, I\'d like just to redirect the browser to the root page, without showing anything. So I tried globbing, but came to no avail, it still shows the 404 page. Here\'s an extract from my routes file:

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

Any suggestions? Thanks, guys!


回答1:


If your project is powered by rails 3, add simply this line to your routes.rb

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

Edit: If you're on Rails 4 or 5

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

or

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



回答2:


Like the answer by Arkan. One point, if do not want this behaviour in development environment, then could do -

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



回答3:


Rails 4-

(routes.rb)

You can still use a simple get to redirect all unknown routes.

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

If you wish to provide routing to both POST and GET requests you can still use match, but Rails wants you to specify the request method via via.

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

Remember that routes.rb is executed sequentially (matching the first route that fits the supplied path structure), so put wildcard catching at the bottom of your matchings.




回答4:


You need create a controller to do that

class RedirectsController 

  def index
    redirect_to root_url
  end
end

And in your routes

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



回答5:


There seems to be a bug in rails 5.2 where active_storage routes are picked up by the catchall route, resulting in broken links to uploaded images. The issue has been reported in the rails repo on github, and someone commented with the below patch until the bug gets fixed in a new release:

In routes.rb right before last end

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

then in the application controller add:

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


来源:https://stackoverflow.com/questions/4132039/rails-redirect-all-unknown-routes-to-root-url

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!