将所有路由错误重定向到应用程序的根URL

时间:2010-06-07 03:26:13

标签: ruby-on-rails redirect exception-handling routing routes

例如输入:localhost:3000/absurd-non-existing-route 如何在Rails中获取指向应用程序主页的无效路由?

5 个答案:

答案 0 :(得分:6)

The solution presented here效果很好

#Last route in routes.rb
match '*a', :to => 'errors#routing'

# errors_controller.rb
class ErrorsController < ApplicationController
  def routing
    render_404
  end
end

答案 1 :(得分:6)

Rails 4 +

根据用户@ Rails: redirect all unknown routes to root_url

提及的最后一个routes.rb上方的get "*path", to: redirect('/')行添加end行来修改您的{{1}}文件

答案 2 :(得分:3)

ApplicationController中使用rescue_from来营救ActionController::RoutingError并在发生时重定向到主页。

这在目前的Rails 3中不起作用。 A ticket has been filed.

答案 3 :(得分:1)

如果您使用的是rails 3 ,则
使用以下解决方案

routes.rb中,在文件末尾添加以下行

  

匹配&#34; *路径&#34; =&GT; &#34; controller_name#action_name&#34;,via:[:get,:post]

在您的控制器中,添加

def action_name
  redirect_to root_path
end

如果您使用的是rails 4

routes.rb

中写下这一行
match '*path' => redirect('/'), via: :get

答案 4 :(得分:1)

这是我想出的一个尝试找到路由异常的通用全能解决方案的东西。它处理大多数流行的内容类型。

的routes.rb

get '*unmatched_route', to: 'errors#show', code: 404

ErrorsController

class ErrorsController < ApplicationController
  layout false

  # skipping CSRF protection is required here to be able to handle requests for js files
  skip_before_action :verify_authenticity_token

  respond_to :html, :js, :css, :json, :text

  def show
    respond_to do |format|
      format.html { render code.to_s, status: code }
      format.js   { head code }
      format.css  { head code }
      format.json { render json: Hash[error: code.to_s], status: code }
      format.text { render text: "Error: #{ code }", status: code }
    end
  end

  private

  def code
    params[:code]
  end
end

ErrorsController旨在更加通用,以处理所有类型的错误。

建议您在app/views/errors/404.html

中为404错误创建自己的视图