我在网上搜索过,有些答案可以帮助我升职,但是我仍然被困住了,所以这里也是。
我是一个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年后,有人可能知道如何完成这项工作。
谢谢!
答案 0 :(得分:0)
我使用Heroku非常简单。它可能在任何地方都不难。
设置完DNS后,Rails图层可能看起来像......
在ApplicationController中创建一个before_filter。 before_filter :domain_check
在domain_check
方法中我只有if request.host ~= /whatever/ do this elsif ... elsif ... end
"做到这一点"可以是重定向或渲染或其他。