指向单轨应用的多个域显示具有相同网址路径的不同内容

时间:2016-06-26 11:38:01

标签: ruby-on-rails amazon-web-services

我在网上搜索过,有些答案可以帮助我升职,但是我仍然被困住了,所以这里也是。

我是一个Rails 4应用程序,允许用户创建传记/博客,然后使用自己的域访问它。

用户可以从几个预先制作的网站模板(主页,关于我的页面,我的爱好页面等等)中进行选择,然后使用CMS加载他们的内容。当访问者访问他们的域名时,将使用他们选择的模板显示内容。

例如:

用户1:

域名:www.user1.com

模板:模板A

用户2:

域名:www.user2.com

模板:模板B

期望的结果

当访问者访问www.user1.com时,他们将看到主页面。当他们点击"关于我"时,他们将重定向到www.user1.com/about-me。如果访问者访问"关于我"用户2的页面,他们将看到www.user2.com/about-me。

我的问题是,如何设置?

基于这个答案:Rails routing to handle multiple domains on single application

class Domain
  def self.matches?(request)
    request.domain.present? && request.domain != "mydomain.com"
  end
end

------in routes.rb------

require 'subdomain'
constraints(Domain) do
  match '/' => 'blogs#show'
end

我知道我可以将一个不同的域路由到一个单独的控制器,但是,我需要将它路由到不同的模板控制器,这些控制器可以随时更改(用户可以随意更改模板)。

我知道我可以设置一个可以读取传入请求的通用控制器,然后根据主机名,我可以提取相应的模板,然后将请求重定向到该模板的控制器(例如:Template1Controller),但是网址搞砸了,变成了" / template / template1 / index"或者" / template / template1 / about-me"这是非常糟糕和丑陋的。此外,处理仅特定于某些模板的路径将非常棘手(模板A可能具有"我的简历"页面,而模板B可能具有"家族历史"页面)。

有办法做到这一点吗?

我考虑过一种方法,我有一个控制器可以处理所有事情(没有重定向),然后只调用render template1/index,但我认为这是一种不好的方法(不同的模板可能需要不同每页中的数据)。

顺便说一句,这将托管在EC2上。

修改 我要实现的内容与此问题Mapping multiple domain names to different resources in a Rails app非常相似,但遗憾的是没有答案。我希望5年后,有人可能知道如何完成这项工作。

谢谢!

1 个答案:

答案 0 :(得分:0)

我使用Heroku非常简单。它可能在任何地方都不难。

设置完DNS后,Rails图层可能看起来像......

  1. 在ApplicationController中创建一个before_filter。 before_filter :domain_check

  2. domain_check方法中我只有if request.host ~= /whatever/ do this elsif ... elsif ... end

  3. "做到这一点"可以是重定向或渲染或其他。