如何在CakePHP中创建子域?

时间:2014-11-22 18:35:17

标签: php .htaccess cakephp

CakePHP版本-2.5.5

我的域名是http://www.thechatfun.com

个人资料页面链接 - http://www.thechatfun.com/users/profile

聊天页面链接 - http://www.thechatfun.com/chats/index

以上两个链接我希望看起来像http://profile.thechatfun.comhttp://www.chat.thechatfun.com

我无法在CakePHP中创建子域。

请帮帮我

由于 ChatFun

3 个答案:

答案 0 :(得分:4)

只要您可以配置域记录以将聊天和配置文件子域指向您的服务器,那么您可以更改webroot文件夹中的htaccess文件并添加..

    <IfModule mod_rewrite.c>
      #standard cake htaccess stuff
      ...

      RewriteCond %{HTTP_HOST} ^profile\.thechatfun\.com$ [NC]
      RewriteRule ^(.*)$ http://www.thechatfun.com/users/profile/$1 [R=301,L]

      RewriteCond %{HTTP_HOST} ^chat\.thechatfun\.com$ [NC]
      RewriteRule ^(.*)$ http://www.thechatfun.com/chats/index/$1 [R=301,L]

    </IfModule>

我有这个确切的要求,这对我有用。

答案 1 :(得分:1)

按照您的上下文,在此目录中/lib/Cake/Routing/Route创建文件SubdomainRoute.php,内容为:

class SubdomainRoute extends CakeRoute {

    public function match($params) {
        $subdomain = isset($params['subdomain']) ? $params['subdomain'] : null;
        unset($params['subdomain']);
        $path = parent::match($params);
        if ($subdomain) {
            $path = 'http://' . $subdomain . '.thechatfun.com' . $path;
        }
        return $path;
    }
}



在创建链接时,您可以执行以下操作以使链接指向其他子域。

echo $this->Html->link(
    'Profile',
     array('subdomain' => 'profile', 'controller' => 'Users', 'action' => 'profile')
);

echo $this->Html->link(
    'Chats',
     array('subdomain' => 'chat', 'controller' => 'Chats', 'action' => 'index')
);

参考:http://book.cakephp.org/2.0/en/appendices/new-features-in-cakephp-2-0.html#routes-can-return-full-urls

答案 2 :(得分:1)

profile.thechatfun.com和www.chat.thechatfun.com是不同的域名。单个http服务器可以处理这两个域,但它不会自动发生。

假设您的网络服务器是Apache,您首先需要配置网络服务器以正确处理这些域。您可以添加VirtualHost指令,以便这两个域由同一个虚拟主机处理并共享文档根目录,或者您可以为每个域添加一个虚拟主机,并为每个域分别设置文档根目录。

您的网络服务器首先收到HTTP请求,然后将请求传递给PHP进行处理。因此,如果您的网络服务器没有正确配置来处理这些域,那么您将无法在PHP或CakePHP中控制它。