如何创建Rails 3路由以匹配所有请求并指向一个资源/页面?

我有一个rails应用程序(Rails 3.0),我需要暂时停止服务。 虽然这有效,但我想创建一个新路由,将所有请求定向到单个静态内容。 我有一个控制器设置为我的静态页面提供服务。

我试过这样的事情:

match '*' => 'content#holding' 

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

匹配这里描述的通配符路由: Rails 3路由通配没有成功。

这可能是一个非常简单的答案,但我无法理解。

/ 编辑 /忘了提到我在routes.rb文件的最顶端确实有这个规则。

Rails需要将url参数绑定到变量,试试这个:

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

如果您还想匹配/ ,请使用括号指定foo是可选的:

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

我碰到了这样的事情,我在路线中将域名作为参数:

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

对此的关键是/.*/,它几乎是任何东西的通配符。 所以也许你可以这样做:

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

我昨天做到了这一点,并首先想出了klochner所展示的解决方案。 我不喜欢这样的事实是,无论你在URL中输入什么,在页面加载后都停留在那里,并且因为我想要捕获所有重定向到我的root_url的路由,这不是很吸引人。

我想出的是这样的:

 # in routes.rb get '*ignore_me' => 'site#unknown_url' # in SiteController def unknown_url redirect_to root_url end 

请记住将路线条目粘贴在文件的最底部!

编辑:正如尼克所指出的,你也可以直接在路线文件中进行重定向。

这条线位于“routes.rb”的哪个位置?

要优先于其他路线,必须先放在首位。

作为替代方案,您可以查看: http : //onehub.com/blog/posts/rails-maintenance-pages-done-right/

或者: Rails:仅限管理员维护模式