2016-06-26 39 views
0

我搜索了网络周围,有帮助我升技的答案,但我仍然卡住,所以这里。多个域指向单轨应用程序显示具有相同的url路径不同的内容

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

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

例如:

用户1:

域:www.user1.com

模板:模板

用户2:

域:万维网.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),但是URL获取搞砸了,变得像“/ 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年后,有人可能会知道如何做到这一点。

谢谢!

回答

0

我用Heroku做这件事很简单。这可能并不难。

一旦DNS设置.. Rails的层可以像...

  1. 创建的ApplicationController一个的before_filter。 before_filter :domain_check

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

“做这个”可以是一个重定向或渲染或什么的。

相关问题