【问题标题】:Rails route based on virtual host (Host HTTP header)基于虚拟主机的 Rails 路由(Host HTTP 标头)
【发布时间】:2011-08-25 21:55:49
【问题描述】:

是否可以根据请求 URL 的主机部分指定 Ruby on Rails 路由?

在 config/routes.rb 中,我有

root :to => 'entities#index'

但我想使用相同的代码库为多个站点提供服务,每个站点都有自己的默认控制器。

【问题讨论】:

    标签: ruby-on-rails routes virtualhost


    【解决方案1】:

    您可以使用Request Base Constraints

    root :to => "siteone#index", :constraints => {:host => "siteone"}
    root :to => "sitetwo#index", :constraints => {:host => "sitetwo"}
    

    希望这会有所帮助。

    【讨论】:

    • 还要记住将这些约束放在不受约束的“根”行之前,因为它们是按顺序处理的。我遇到的另一个问题是,除非您的“siteone”域 DNS 配置为指向您的本地主机,否则您无法在本地服务器上测试新路由。正确部署并部署到生产环境后,您需要重新配置 DNS 以指向生产服务器。
    • @AminAriana 您可以通过将约束中的主机名添加到具有本地 IP (127.0.0.1) 的 /etc/hosts 文件中来在本地测试路由,而无需修改 DNS 服务器
    • @Eero:谢谢,你是对的,我记得在 Windows 中。但我在 Mac 上,不熟悉如何做到这一点。看起来有一种方法:decoding.wordpress.com/2009/04/06/… ...但我选择从 DNS 服务器更改它。这样我的代码继承人就不必欺骗他们的机器了。
    • 是否可以使用“主机”以外的标头来执行此操作?也许是自定义标头,例如“APIVersion”?!?
    • @Leonardo 您可以使用的方法列表在这里:guides.rubyonrails.org/… 但它们需要返回一个字符串,基于guides.rubyonrails.org/routing.html#request-based-constraints 的文档
    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2013-12-13
    相关资源
    最近更新 更多