繁体   English   中英

构建“多站点”应用程序

[英]Building a 'multi-site' application

我正在计划一个允许用户创建特定类型网站的应用程序。 我想将帐户名称链接到“account.myapp.com”。 转到'account.myapp.com'将提供一个网站。 我不知道如何映射这个。 我将使用Code Igniter作为我的开发工具。

我想让用户能够为他们的网站添加注册域名,而不是使用标准子域名。 有关此的任何提示/方法吗?

另外,在开发这种设计的东西时,我应该寻找哪些陷阱和问题? 我最担心的是在数据库设计糟糕的情况下支持自己,并创建一个维护或更新应用程序的噩梦。

谢谢你的时间!

您计划为所有站点提供服务的单个应用程序将是一项艰巨的任务和大量工作。 这并不是说不可能(大量的企业CMS,包括Sharepoint,允许您从单个安装中运行'虚拟站点'等)。

您需要进行大量的规划和设计,特别是在安全方面,以确保各个站点单独运行。 我假设每个站点都有自己的帐户 - 您将不得不做很多工作以确保用户不会意外(或恶意)开始编辑其他站点。

你考虑维护是正确的 - 如果所有站点都在一个应用程序下运行,因此只有一个数据库,那么该数据库将变得非常庞大和混乱。 然后它也成为单点故障。

一个更好的计划是开发一个独立的解决方案(对于一个网站) - 然后可以从它自己的目录运行,它有自己的数据库和它自己的一组帐户。 它将显着缩小(在代码和数据库方面),因此可能表现更好。 日常维护会更容易(从备份恢复网站),但软件更新(添加新功能)会有点棘手,虽然因为它只是文件上传和SQL补丁,所以你可以自动化这个轻松。

在域名方面:如果您使用了invidual应用程序(每个网站一个)方法,您可以使用Apache的动态虚拟主机功能,该功能可以有效地将URL映射到文件系统(因此,website.mydomain.com可以自动转换为从/ home / vhosts / com / mydomain / website切断:因此部署一个新网站只需将文件复制到正确的目录,创建数据库和更新配置文件,所有这些都可以自动完成缓解。

如果用户想要使用他们自己的URL,那么他们必须首先更新他们的DNS以指向您的服务器,其次您需要为该域配置Apache vhost,这可能涉及重启apache并因此影响所有其他用户。

这在codeigniter中非常容易,可以使用routes.php和预控制器挂钩完成。

这就是说...不要这样做。 这通常不是一个好主意。 甚至37Signals,这种使这种帐户管理着名的人正在放弃,并转向集中帐户。 查看http://37signals.com/accounts

如果我正确理解您的问题,您需要设置通配符DNS,并使用Apache mod_rewrite在内部重定向(示例)myaccount.myapp.com到myapp.com/?account=myaccount。 你的app逻辑可以从那里拿走它。

我只是谷歌搜索,“通配符dns mod_rewrite帐户”(没有引号),并找到一些带有说明的示例,例如:

http://www.reconn.us/content/view/46/67/

这是构建某些Web应用程序IMO的有效且理想的方式。 我不知道严重的缺点。

我真的不知道一种很好的(自动/可扩展)方式允许用户指定他们自己的域名,但是如果你让他们修改域名的DNS以指向你的web服务器,那么你可以做到这一点,然后在您的“myapp”Apache配置中添加了ServerAlias指令。 您仍然遇到myapp运行时实例了解通过客户域发出的请求特定于客户帐户的问题。 所以(例子)customeraccount.com真的等同于myapp.com/?account=customeraccount。 一些更多的mod_rewrite规则可能会解决这个问题,但它不是自动化的(也许它可能是包含文件等)。

对不起,您说您正在使用CodeIgniter ...替换myapp.com/account/myaccount,其中我写了myapp.com/?account=myaccount。

首先,您必须设置您的Apache(或您正在使用的任何网络服务器),以便为每个子域提供相同的DNS设置(通配符匹配)。 然后,您必须使用CodeIgniter的路由功能从请求URL解析子域,将其设置为param(或CodeIgniter中调用的任何内容),并在控制器中使用它。

关于陷阱和问题:这取决于你想做什么。 ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM