代码之家  ›  专栏  ›  技术社区  ›  Melissa L

通配符DNS?重新使用名称。htaccess?

  •  0
  • Melissa L  · 技术社区  · 13 年前

    我一直在阅读以前的帖子,但我不知道什么对我的设置有效或无效,所以非常感谢这里的任何帮助!

    首先,我使用的是最新版本的CakePHP(2.2)。我在一个(gs)帐户w/MediaTemple上托管。

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

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

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

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

    我还想让他们选择注册自己的域名,并指向/重定向/某些东西到子域,同时在url中显示他们的唯一域。我也不想托管额外的域名,所以这可以通过名称服务器完成吗?

    有什么想法吗?提前感谢:)

    1 回复  |  直到 13 年前
        1
  •  2
  •   Community Mohan Dere    5 年前

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

    answered a question recently 使用这种方法。

    密码

    链接的答案显示了DomainRoute,我使用它来支持CakePHP方面的动态子域。这包含了从项目的这一点处理它所需的所有代码。

    其中唯一的应用程序特定代码,以及您需要更改的代码是 Cause 相关内容:

    $Cause = new Cause();
    if (!($Cause->domainExists($domain) ...
    

    原因 是我的应用程序中的模型,并且它有 domainExists 方法此方法检查是否通过 $domain 存在于任何 原因 (或子网站)。实施 域存在 是一个非常简单的 find 呼叫:

    public function domainExists($domain) {
        $causes = $this->Cause->findByDomain($domain);
        return !empty($causes);
    }
    

    如果数据库中确实存在域,则会将整个域添加到 $params 变量

    如果域 没有 存在于数据库中时,它会进行一些重定向。

    域名系统

    DNS应设置为通配符。实现这一点的方式因提供程序而异,但在普通BIND中,是这样做的:

    * CNAME domain.com.
    

    这将为您的DNS记录添加一个通配符CNAME。

    我希望这能有所帮助。前面回答的问题中的代码是最有用的,所以请确保您首先仔细阅读。