如何将子域名路由到 routes.rb 中的 rails 应用程序?



我有一个网址 https://www.openhub.net 这是我的rails 4.2.7应用程序。我在另一个系统上有一个单独的子域,这是 https://code.openhub.net/。如果您在第二个链接上点击,这会将您重新路由到已停止的页面。托管code.openhub.neturl 的内容将被取消,并将被重新路由到openhub.net。所以我要做的是,当有人试图去code.openhub.net我的 rails 应用程序时,具有openhub.net将提供一个静态页面。问题是我无法概念化这将如何工作。例如,下面是路由下的 rails 文档片段。

3.9 基于请求的约束 还可以根据返回 String 的 Request 对象上的任何方法来约束路由。

指定基于请求的约束的方式与指定 段约束:

get 'photos', to: 'photos#index', constraints: { subdomain: 'admin' }
You can also specify constraints in a block form:
namespace :admin do
constraints subdomain: 'admin' do
resources :photos
end
end
请求

约束通过调用请求对象上的方法工作 与哈希键同名,然后比较返回值 与哈希值。因此,约束值应与 对应的请求对象方法返回类型。例如: 约束:{ 子域:"API" } 将匹配 API 子域 作为 预期,但是使用符号约束:{ 子域::API } 将 不是,因为request.subdomain以字符串形式返回"API"。

我理解文档在说什么,但是当我尝试将此代码付诸实践时,我被难住了。这是我routing.rb文件:

get '???', to: '???', constraints: { subdomain: 'code' }

我知道 url 的子域约束部分将是代码,但getto会是吗?我怎么知道会下 get?我是否只是简单地替换将路由到CodeController#indexget code.openhub.net?以前有人尝试过做这样的事情吗?从文档中,我看到请求对象具有可以调用的original_url方法。也许有办法利用它吗?任何帮助将不胜感激。

  • 作为旁注,我注意到子域不是此处概述的请求对象的属性 Rails 请求对象

这应该有效:

get '/', to: 'code#index', constraints: { subdomain: 'code' }

这会将要https://code.openhub.net/的请求路由到CodeController中的index方法。

但是,URL 仍然会显示https://code.openhub.net/.如果您不希望这样做,可以尝试重定向,如下所示:

get '/', to: redirect('https://www.openhub.net/'), constraints: { subdomain: 'code' }

最新更新