我想知道在创建web应用程序时启用自定义域的最佳方式。例如,如果你看起来像大本营,当你注册时,你创建了你自己的‘子域’,你用来登录到你的大本营。
此外,如果你看起来像托管的电子商务网站,你可以使用你自己的自定义域名,而不是使用他们的子域。
就我个人而言,我不能看到这些web应用程序将每个自定义域名‘停放’在web应用程序托管帐户上,或者添加DNS,如果它使用像Base Camp那样的子域。
因此,我唯一能想到动态地做这样的事情的方法就是使用mod_rewrite将所有东西重定向到某个脚本,该脚本根据url进行“路由”。然后,对于客户域名,客户只需将其域名的CNAME添加到类似custom.webappname.com的内容中,然后由mod_rewrite和php路由文件获取该域名。
如果这是最好的前进方式,那么通过这个“路由文件”路由所有传入的请求是否存在性能问题?
如果我说得不清楚,很抱歉,我已经尽力解释了。
发布于 2011-07-13 20:44:15
是的,你的解决方案将是最好的方式。其他网站也是这么做的。使用重写规则通过中心文件重新路由所有请求会导致很小的性能损失,但这是值得的。
事实上,在大多数应用程序中,无论如何你都已经在付出代价了。任何使用FrontController模式的框架都已经做到了这一点。这包括几乎所有的框架,如Zend,Symfony 1和2,CakePHP,CodeIgniter和许多其他框架。
发布于 2011-07-13 20:58:11
这真的取决于你使用的web应用程序。
例如,我们有一个托管的内容管理系统,使用cPanel应用程序接口,我们确实为每个客户创建了一个实际的托管帐户,并在创建帐户时安装了大约50KB的文件,包括默认模板、初始设置脚本(处理数据库安装、初始数据填充和基本设置等)和一些基本的前端控制脚本,如联系人表单,也就是说,我们不提供对托管帐户的访问,所有的交互都是通过我们的web应用程序进行的。在我们的例子中,这与子域或完全限定域无关。我们的客户可以选择自行托管他们的域名或我们将托管它,因为我们有完整的cPanel托管基础设施,这对我们没有区别的域名在哪里,但如果客户有它远离我们,这完全是他们的责任。
我们有这个托管设置的原因是,这样客户就可以上传他们自己的模板,用于磁盘存储管理(我们对成为文件服务器不感兴趣,但客户需要一些空间来存放PDF,图像等),并确保一个客户的内容不会与另一个客户的内容混在一起。作为一项高级付费服务,我们的律师建议在服务器上使用最少的独立可识别文件夹来存储文件。
另一个例子是blogger/blogspot,众所周知,他们使用mod_rewrite作为他们的子域。这对他们来说是合适的,否则他们将不得不为每个博客至少创建一个单独的DNS专区,这是一个痛苦(所以我们使用cPanel),加上你有你所有的其他虚拟主机设置。如您所知,对于mod_rewrite,它将使用单个通配符区域来控制子域,并且mod_rewrite规则很容易应用。从那里,它只是创建一个文件夹,并将子域的请求重定向到它,或者直接指向脚本来控制您的应用程序,这取决于您正在做什么。
事实是,对于使用子域的自动化系统,我会使用mod_rewrite,但对于一些更复杂的东西,如需要完全符合法律规定、配额管理、挂起、终止和文件删除功能的完全成熟的高级内容管理系统,我会建议您查看主机控制面板,如cPanel作为可能的解决方案。
发布于 2011-07-13 21:16:19
你的想法很正确。你只有一个代码库,在一个IP上运行(为了便于讨论)。您不需要担心虚拟主机,甚至不需要担心mod_rewrite (除了您的应用程序需要的任何东西)。
您的web应用程序只需处理对该IP的任何和所有请求(在端口80或443上,或其他端口)。
当您的应用程序响应请求启动时,它会窥视$_SERVER‘’HTTP_HOST‘,并针对与该域名关联的客户端进行自我配置。如果没有找到,它是404,或者任何最有意义的东西。
https://stackoverflow.com/questions/6678941
复制相似问题