【问题标题】:How can I create a Rails 3 route that will match all requests and direct to one resource / page?如何创建一个匹配所有请求并指向一个资源/页面的 Rails 3 路由?
【发布时间】:2011-12-30 14:24:46
【问题描述】:

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

我尝试过这样的事情:

match '*' => 'content#holding'

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

按照此处所述匹配通配符路由:Rails 3 route globbing,但未成功。

这可能是一个非常简单的答案,但我想不通。

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

【问题讨论】:

  • 你有没有把这条路线放在你的路线文件的最顶部?

标签: ruby ruby-on-rails-3 rails-routing


【解决方案1】:

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

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

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

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

【讨论】:

  • 这似乎适用于所有路径,但不适用于根本身。我还在 routes.rb 的顶部添加了一个额外的临时根路由,所以现在它按我想要的方式工作 - 谢谢!
  • 我的最终结果如下所示:“match '*foo' => redirect('/') #NEWLINE root :to => 'content#holding'” 基本上我接受了你的想法,添加了重定向,然后将根临时路由到我的保留页面。
  • 如果您要重定向,请确保它是 302(临时移动)而不是 301(永久移动)
  • 它就像一个魅力。但是你能分享一下官方文档在哪个地方显示这些信息吗?
  • 我建议使用all 作为更具描述性的变量名称。
【解决方案2】:

我昨天才这样做,并首先提出了 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 中进行重定向 - 请参阅上面我对 klochner 的回答的评论
  • @Nick Ah,现在这很漂亮。将切换到该解决方案。
【解决方案3】:

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

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

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

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

【讨论】:

    【解决方案4】:

    这条线在“routes.rb”中的什么位置?

    要优先于其他路由,必须先放置。

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

    或者这个:Rails: admin-only maintenance mode

    【讨论】:

    • 糟糕——忘了说是的,它在文件的顶部。
    • 你重启服务器了吗? :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多