如何创建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:仅限管理员维护模式