How can I create a Rails 3 route that will match all requests and direct to one resource / page?

青春壹個敷衍的年華 提交于 2019-12-03 15:14:15

问题


I have a rails app (Rails 3.0) that I need to temporarily take out of service. While this is in effect, I want to create a new route that will direct all requests to a single piece of static content. I have a controller set up to serve my static pages.

I tried something like this:

match '*' => 'content#holding'

and

match '*/*' => 'content#holding'

to match a wildcard route as described here:Rails 3 route globbing without success.

This is probably a really simple answer, but I couldn't figure it out.

/EDIT/ Forgot to mention that I did have this rule at the very top of my routes.rb file.


回答1:


Rails needs to bind the url parameters to a variable, try this:

match '*foo' => 'content#holding'

If you also want to match /, use parenthesis to specify that foo is optional:

match '(*foo)' => 'content#holding'



回答2:


I ran into something like this where I had domain names as a parameter in my route:

match '/:domain_name/', :to => 'sitedetails#index', :domain_name => /.*/, :as =>'sitedetails'

The key piece to this was the /.*/ which was a wildcard for pretty much anything. So maybe you could do something like:

match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want'



回答3:


I did this just yesterday and first came up with the solution that klochner shows. What I didn't like about this is the fact that whatever you enter in the URL, stays there after the page loads, and since I wanted a catch all route that redirects to my root_url, that wasn't very appealing.

What I came up with looks like this:

# in routes.rb
get '*ignore_me' => 'site#unknown_url'

# in SiteController
def unknown_url
  redirect_to root_url
end

Remember to stick the routes entry at the very bottom of the file!

EDIT: As Nick pointed out, you can also do the redirect directly in the routes file.




回答4:


Where in "routes.rb" is this line located?

To have priority over other routes, it has to be placed first.

As an alternative, you can look into this: http://onehub.com/blog/posts/rails-maintenance-pages-done-right/

Or this: Rails: admin-only maintenance mode



来源:https://stackoverflow.com/questions/8680439/how-can-i-create-a-rails-3-route-that-will-match-all-requests-and-direct-to-one

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