如何使用Cake PHP创建子域


cakeHow to create Sub Domains using Cake PHP?

我正在建立一个网站,这需要一个独特的子域为每个配置文件。我使用的技术是蛋糕PHP + MongoDB。我需要知道这样做的可行性。我是否可以创建一个物理DNS,或者我可以简单地路由用户的配置文件页面,通过在Cake PHP中的路由类的帮助。请建议什么将是更好的和容易的方法来实现以及可行性的相同。

提前感谢。

如果您为每个网站使用CakePHP,则不需要担心每个站点的多子域创建,您可以简单地创建一个通配符DNS记录。这消除了服务器和DNS管理的许多麻烦。

通配符DNS记录(Wiki)

有了通配符DNS记录后,您可以使用HTTP_HOST或CakePHP方式,$request->host()来确定用于访问系统的主机名(子域)。然后,你可以在AppController的beforeFilter()方法中加载正确的配置文件详细信息,并从那里继续前进。

我做了类似的事情:

class User extends AppModel
{
     public $belongsTo = array(
          'Profile'
     );
     public function findByProfileHostname($hostname) {
         return $this->find('first', array('conditions' => array(
             'Profile.hostname' => $hostname
         ));
     }
};
class AppController extends Controller
{
    public function beforeFilter () {
        $this->ActiveUser = $this->User->findByProfileHostname($this->request->host());
        if (!$this->ActiveUser) {
            throw new InvalidArgumentsException(__('%s is not active here', $this->request->host()));
        }
    }
}

*免责声明:以上代码是从内存中键入的,可能无法通过复制/粘贴直接工作。

希望这对你有帮助。

这很容易做到!只需要一点点脚本和主机配置:

让我们假设,现在忽略子域,您可以通过yoursite.com/users/view/id -标准约定访问用户配置文件。

然后我们需要做的就是将username.yoursite.com映射到正确的yoursite.com/users/view/id -这应该在用户注册时发生。因此,在users/add -我们需要写一个脚本,可以访问您的服务器的'users'/'sites-available'(或同等)-要么追加到已经存在的'yoursite.com'配置的末尾,或使新的'username.yoursite.com'每次用户注册。

现在恼人的一点-在服务器上,你的应用程序将需要读取/写入服务器配置文件夹的权限,加上服务器还需要重新启动一个新的配置文件-我的系统管理技能只能到此为止,你必须找到;通过运行一个bash脚本或其他东西来让服务器读取新的配置文件,而不需要重新启动。

还要确保在用户名更改或用户删除时更新服务器文件。

首先。子域的创建与Cake、Mongo或PHP无关。这是一个DNS的事情,你需要创建正确的DNS条目。例:

subdomain1 IN CNAME domain.com.
subdomain1 IN A 123.2.33.45.

正如@e-sushi指出的那样,这需要时间。您可以自动化此过程,但不是使用PHP,而是使用root访问权限(实际上您可以在PHP中使用shell_exec执行此操作,但那是另一回事)。根据您的主机,这实际上是相当复杂和不可靠的时间。

想象下面的场景。用户被创建,但他将能够在6到24小时后访问其网页。你必须暂时创建一些临时路径和一个完整的场景,包括数据发生了什么以及链接是如何指向的……等。过于复杂。

Cake的路由机制是一种辅助机制,它可以使用内部逻辑转换请求并将其解决到另一个路径。它可以是这样的:

yourwebsite.com/user/1

并将其转换为:

joe.yourwebsite.com

但是这个过程是独立于子域的创建和维护的

总之:

使用Cake PHP自动创建子域?对不起,这行不通。

:

使用Cake PHP中的Routes类是无法到达你想去的地方的。"Routes"允许配置路径,但不能创建路径或子域。如前所述:你说的是两件不同的事情:Cake PHP的路由Class =基于PHP的重写,子域=服务器的DNS配置。

在您浪费时间考虑DNS之前,请注意新的DNS条目可能需要长达24小时才能启动。在使用新的(子)域之前,必须传播它。你确定这是你想要的吗?这可能意味着(考虑用户注册)新用户可以注册,但不能使用甚至不能到达他们的"新"子域名,因为它还没有被几个DNS服务器知道。

但是…如果等待时间对您没有问题,您可以尝试使通配符子域工作。但这在很大程度上取决于你的网络托管提供商和他们允许你做什么。如果有疑问,请联系他们(在您了解了通配符DNS的作用和之后,如果您真的想使用)。

类似的问题和答案可以在这里找到:

  • 我如何创建个人子域编程与php
  • 如何使用DNS自动创建子域?

但是我只能给你一个好的建议:在开始走这条路之前要三思。对于你和你的用户来说,这可能会变得太颠簸,然后你就会浪费宝贵的时间,而这些时间本可以更好地投入到制定替代方案中。此外,一个体面的目录结构有什么不好呢?众所周知,搜索引擎更喜欢合适的目录结构,而不是子域名设置,因为当所有数据都与一个网站相关时,目录结构更合乎逻辑。即使那个网站很大…比如Facebook或Twitter。div;)