允许在web应用程序项目中使用自定义域名


Allowing the usage of custom domain names for web application projects

我想知道创建web应用程序时启用自定义域的最佳方法。例如,如果你看一下像Base Camp这样的东西,当你注册它时,你创建了自己的"子域",你可以用它登录到你的Base Camp。

另外,如果你看这个像托管电子商务网站,你可以使用自己的自定义域名,而不是使用他们的子域名。

我个人无法看到这些web应用程序在web应用程序托管帐户上"停放"每个自定义域或添加DNS,如果它使用像Base Camp这样的子域。

因此,我能想到动态地做这样的事情的唯一方法是使用mod_rewrite将所有内容重定向到基于url的"路由"的某个脚本。然后对于客户域,客户只需要为他们的域添加一个CNAME到custom.webappname.com,然后由mod_rewrite和php路由文件拾取。

如果这是最好的前进方式,通过这个"路由文件"路由所有传入请求是否有任何性能问题?

对不起,如果我不清楚,我已经尽力解释了。

是的,你的解决方案将是最好的方法。其他网站就是这么做的。使用重写规则通过一个中心文件重新路由所有请求会带来很小的性能损失,但这是非常值得的。

事实上,在大多数应用程序中,已经付出了代价。任何使用FrontController模式的框架都已经做到了这一点。这包括几乎所有的框架,如Zend, Symfony 1和2,CakePHP, CodeIgniter和许多其他的。

这取决于你使用的web应用程序。

例如,我们有一个托管CMS,使用cPanel API,我们为每个客户创建一个实际的托管帐户,并在帐户创建上安装大约50KB的文件,包括默认模板,初始设置脚本(处理DB安装,初始人口数据和基本设置等)和一些基本的前端控制脚本,如联系表单,在说我们不提供访问托管帐户。所有的交互都是通过我们的web应用程序。在我们的情况下,这是不管是否是子域或完全合格的域。我们的客户可以选择自己托管他们的域名,或者我们来托管它,因为我们有完整的cPanel托管基础设施,这对我们来说没有什么区别,但如果客户把它从我们这里拿走,那完全是他们的责任。

我们设置这个主机的原因是客户可以上传他们自己的模板,用于磁盘存储管理(我们对成为文件服务器不感兴趣,但客户需要一些空间来存储pdf,图像等),并确保一个客户的内容不会与另一个客户的内容混在一起。作为一项收费服务,我们的律师建议在服务器上存储文件时尽量少使用可识别的单独文件夹。

另一个例子是blogger/blogspot,众所周知,他们使用mod_rewrite为他们的子域。这对他们来说是合适的,否则他们将不得不为每个博客至少创建一个单独的DNS区域,这是一个痛苦(因此我们使用cPanel),加上你有所有其他虚拟主机设置。使用mod_rewrite,你会意识到它将使用一个通配符区域来控制子域,并且mod_rewrite规则很容易应用。从那里,它只是简单地创建一个文件夹,重定向请求的子域到它或定向到脚本来控制你的应用程序,这取决于你在做什么。

事实是,对于一个使用子域的自动化系统,我会使用mod_rewrite,但对于一些更复杂的东西,比如一个完全成熟的高级CMS,需要完全符合法律,配额管理,暂停,终止和文件删除功能,那么我建议考虑一个托管控制面板,如cPanel作为一个可能的解决方案。

你的想法是对的。您保留一个代码库,在单个IP上运行(为了便于讨论)。您不需要担心虚拟主机,甚至mod_rewrite(除了您的应用程序需要)。

你的web应用程序只是处理任何和所有的请求到该IP(端口80或443,或其他)。

当您的应用程序启动响应请求时,它会偷看$_SERVER['HTTP_HOST'],并为与该域名相关的客户端配置自己。