0

我一直在阅读以前的帖子,但我无法弄清楚我的设置会起作用或不起作用,因此非常感谢这里的任何帮助!

对于初学者,我使用的是最新版本的 CakePHP (2.2)。我托管在带有 MediaTemple 的 (gs) 帐户上。

我有一个网站,用户可以在 domain.com 上注册一个帐户。

用户可以在dashboard.domain.com 访问和更改他们的信息。

用户可以在sites.domain.com/username 上查看他们的个人信息。用户可以通过从数据库中选择一个主题来改变这个页面的外观,为此,我使用的是 CakePHP 的主题结构。有一个带有多个 css 选项的基本布局,因此所有内容都从数据库中提取到这个文件中,并且根据他们选择的“主题”,提取不同的 css 文件。这一切都很好。

我更喜欢的是他们从通配符子域(?)中看到他们的页面,即。username.domain.com 而不是 sites.domain.com/username。

我还想为他们提供注册自己的域名的选项,并将其指向/重定向/指向子域,同时仍然在 url 中显示他们的唯一域。我也不想托管额外的域名,所以这可以通过名称服务器来完成吗?

关于我从这里去哪里的任何想法?提前致谢 :)

4

1 回答 1

2

这是一个非常常见的请求,它属于 Web 应用程序开发的“多租户”方法。

最近回答了一个使用这种方法的问题。

代码

链接的答案显示了我用来支持 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.

这会将通配符 CNAME 添加到您的 DNS 记录中。

我希望这会有所帮助。之前回答的问题中的代码是最有帮助的,因此请务必先仔细阅读。

于 2012-08-08T23:29:23.537 回答