2012-08-08 110 views
0

我一直在阅读以前的帖子,但我无法弄清楚什么会工作或不会与我的设置工作,所以任何帮助在这里非常感谢!通配符DNS?重定向? CNAME?的.htaccess?

对于初学者,我使用的是最新版本的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中显示其唯一的域。我也不想主持其他域名,所以这可以做名称服务器?

有关我从哪里出发的想法?在此先感谢:)

+0

这对于单个问题来说太多了。对不起,但它非常广泛。将它分成多个较小的问题 - 如何设置通配符子域名,如何自定义每个用户的子域名等等...... Aswell,其中的很多内容对这里来说都是偏离主题的。尝试serverfault为dns/web服务器配置的东西 – 2012-08-08 20:49:22

回答

2

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

I 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

DNS应设置为通配符。这样做的方式,从供应商提供的不同,但在普通的BIND,它这样做:

* CNAME domain.com. 

,增加了一个通配符CNAME到你的DNS记录。

我希望有帮助。以前回答的问题中的代码是最有帮助的,因此请确保您先仔细阅读。