我需要在Ruby on Rails项目中指定一个命名路由,该项目返回public / 404.html页面以及404服务器响应代码。
将它留空不是一个选项,请不要质疑为什么,它只是:)它绝对必须是一个命名路由,或者map.connect条目可以。
这样的事情会很棒:
map.my_named_route '/some/route/', :response => '404'
任何人都知道做这样事情的最简单方法是什么。我可以创建一个呈现404.html文件的控制器方法,但认为可能有一种更清晰的方法来执行此操作。期待任何回复 - 谢谢,
埃利奥特
答案 0 :(得分:44)
您可以路由到出现简单404的机架端点(rails 3):
match 'my/route', to: proc { [404, {}, ['']] }
例如,这对于定义到omniauth endpoint的命名路线非常方便:
match 'auth/:action', to: proc { [404, {}, ['']] }, as: :omniauth_authorize
答案 1 :(得分:3)
在您的routes.rb中:
map.my_404 '/ohnoes', :controller => 'foobar', :action => 'ohnoes'
在FoobarController
:
def ohnoes
render :text => "Not found", :status => 404
end
如果您需要渲染与普通404相同的404文件,则可以使用render :file
执行此操作。
有关示例,请参阅ActionController::Base文档。
答案 2 :(得分:2)
为什么不在Apache / nginx中使用mod_rewrite(或者nginx重写)链接到不存在的页面或者发送410(Gone,不再存在)Flag?
无论如何,如果您希望rails应用程序执行此操作,我认为方式与您建议的方式相同,创建指向执行render(:file => "#{RAILS_ROOT}/public/404.html", :status => 404)
答案 3 :(得分:1)
比以前的404答案更短的版本任何一行得到。
get '*_', to: ->(_) { [404, {}, ['']] }