我一直在阅读以前的帖子,但我无法弄清楚什么会起作用或者不能使用我的设置,所以非常感谢这里的任何帮助!
首先,我正在使用最新版本的CakePHP(2.2)。我正在使用MediaTemple的(gs)帐户托管。
我有一个网站,用户可以在domain.com注册帐户。
用户可以在dashboard.domain.com上访问和更改他们的信息。
用户可以在sites.domain.com/username上查看他们的个人信息。用户可以通过从数据库中选择一个主题来更改此页面的外观,为此,我正在使用CakePHP的主题结构。有一个基本布局有多个css选项,所以一切都从数据库中拉到这个文件中,根据他们选择的“主题”,拉出不同的css文件。这一切都运作良好。
我更喜欢的是他们从通配符子域(?)看到他们的页面,即。 username.domain.com而不是sites.domain.com/username。
我还想让他们选择注册他们自己的域名,并指向/重定向/某些东西到子域名,同时仍然在网址中显示他们的唯一域名。我也不想托管其他域名,所以这可以用名称服务器来完成吗?
关于我从哪里开始的任何想法?在此先感谢:)
答案 0 :(得分:2)
这是一个非常常见的请求,它属于Web应用程序开发的“多租户”方法。
我answered a question recently使用这种方法。
链接的答案显示了我用来支持CakePHP方面的动态子域的DomainRoute。这包含了从项目的这一点开始处理它所需的所有代码。
那里唯一的应用程序特定代码,您需要更改的代码是Cause
相关内容:
$Cause = new Cause();
if (!($Cause->domainExists($domain) ...
Cause
是我的应用程序中的模型,它有domainExists
方法。此方法检查在$domain
(或子网站)上是否存在传递的Cause
。 domainExists
的实施是一个非常简单的find
调用:
public function domainExists($domain) {
$causes = $this->Cause->findByDomain($domain);
return !empty($causes);
}
如果域中确实存在域,则会将完整域添加到$params
变量。
如果数据库中存在域不,则会进行一些重定向。
应将DNS设置为通配符。这样做的方式因提供商而异,但在普通的BIND中,它的完成方式如下:
* CNAME domain.com.
这会在您的DNS记录中添加通配符CNAME。
我希望有所帮助。以前回答的问题中的代码是最有帮助的,所以请务必先仔细阅读。