map.connect '*path', :controller => 'application', :action => 'rescue_404' unless ::ActionController::Base.consider_all_requests_local
Then add to your application.rb
def rescue_404
rescue_action_in_public CustomNotFoundError.new
end
def rescue_action_in_public(exception)
case exception
when CustomNotFoundError, ::ActionController::UnknownAction then
#render_with_layout "shared/error404", 404, "standard"
render :template => "shared/error404", :layout => "standard", :status => "404"
else
@message = exception
render :template => "shared/error", :layout => "standard", :status => "500"
end
end
def local_request?
return false
end
Sometimes you may want to throw a 404 yourself. For example if they go to /wiki/doesnotexist you can render your own page. Use something as simple as:
render :action => "something", :status => 404
or as simple as
render :file => "#{RAILS_ROOT}/public/404.html", :status => 404 and return