通过路线进行自定义错误的导轨 - 读取原始请求的URL



我正在使用自定义错误控制器。访问500页URL时,我想拥有200个响应代码(否则我的中间件截获了500个响应代码会在我想炫耀我的500时向我发送异常电子邮件(

似乎使用self.routes,因为exceptions_app将更改request.path以始终等于错误号

目标

  • 访问www.example.com/crashy_url#=>应显示自定义500错误模板,带有500响应代码
  • 访问www.example.com/500#=>应显示自定义500错误模板,带有200响应代码

问题

  • 请访问www.example.com/crashy_url#=>请求。路径等于`/500',因此我的控制器发送200响应代码

我该如何提取真正访问的URL?

# config/application.rb
config.exceptions_app = self.routes
# routes
match '/500', to: 'errors#server_error', via: :all
# app/controllers/errors_controller.rb
def server_error
    @status = 500
    can_be_visited_with_ok_response_code
    show
  end
def can_be_visited_with_ok_response_code
    # We want to hide hide the faulty status if the user only wanted to see how our beautiful /xxx page looks like
    # BUT `action_dispatch/middleware/debug_exceptions` will change request.path to be equal to the error !!
    # @status = 200 if request.path == "/#{@status}" # BAD request.path will always return response code
  end
  def show
    respond_to do |format|
      format.html { render 'show', status: @status }
      format.all  { head @status }
    end
  end

我爱ruby和 did_you_mean ...我能够猜测正确的方法名称:request.original_fullpath应该使用用户输入原始URL。

@status = 200 if request.original_fullpath == "/#{@status}"

请注意,request.original_url还可以为您提供完整的路径,包括主机名

相关内容

  • 没有找到相关文章

最新更新