如何在 CakePHP 中创建子域?

Posted

技术标签:

【中文标题】如何在 CakePHP 中创建子域?【英文标题】:How to create a sub-domain in CakePHP? 【发布时间】:2015-01-20 18:11:27 【问题描述】:

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

【问题讨论】:

我觉得这个教程对你有帮助:book.cakephp.org/2.0/en/appendices/… 检查一下...***.com/questions/6744733/… 【参考方案1】:

只要您可以将域记录配置为将聊天和配置文件子域都指向您的服务器,那么您就可以更改 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>

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

【讨论】:

我将在哪个.htaccess 文件中添加此代码?在 cakephp 中有 3 个 .htaccess。在应用程序文件夹之外。在 app 文件夹和 webroot 文件夹中。 @Chinu 编辑app_folder/.htaccess 文件,而不是webroot/.htaccess @NguyễnAnhTuấn 感谢您在很长一段时间后发表评论。【参考方案2】:

按照您的上下文,在此目录中:/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

【讨论】:

在哪里可以调用 SubdomainRoute?【参考方案3】:

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

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

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

【讨论】:

以上是关于如何在 CakePHP 中创建子域?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CakePHP 中创建自定义 MySQL 查询?

如何在 laravel 中创建子域

如何在 CakePhp 中创建 Zip 文件并下载?

如何在 apache(xampp) 服务器中创建子域?

如何在webapp中创建子域用户帐户

如何使用 MAMP Pro 在 Codeigniter 3 中创建动态子域