根据CakePHP中的ServerName设置变量

时间:2012-11-07 11:48:52

标签: php apache cakephp dns subdomain

我正在构建一个小应用程序,人们可以在其中构建某种组合。

目前,每个用户都可以使用网址www.example.com/USERNAME链接到他们的投资组合,并处理CakePHP中的所有内容,这是我正在使用的路由器规则:

Router::connect('/:user/:action/*', array('controller'=>'pages'), array('named' => array('user')));

所以以这种方式形成链接:www.example.com/USERNAME/homewww.example.com/USERNAME/contact

这是我的问题。我希望用户可以将其域名的DNS指向我的IP并更改www.mypersonalsite.com/homewww.mypersonalsite.com/contact中的网址,依此类推。

就像tumblr那样...

实现这一目标的最佳方法是什么?

谢谢大家:)

1 个答案:

答案 0 :(得分:0)

将新字段添加到用户表“personal_domain”

确保您的Apache已设置好,因此适用于您的应用的网站会将所有访问服务器的域转发到您的Cake应用

在app_controller中将类似的内容添加到beforeFilter()

$domain = $_SERVER[ 'SERVER_NAME' ];
$sessionDomain = '';
if( $this->Session->check( 'User.personal_domain' ) )
{
    $sessionDomain = $this->Session->read( 'User.personal_domain' );
}

if( $domain != $sessionDomain )
{
    $User = ClassRegistry::init( 'User' );
    $domainUser = $User->find( 'first', array(
        'conditions' => array(
            'User.personal_domain' => $domain
        )
    ) );

    if( empty( $domainUser ) )
    {
        // whatever you usually do for users that don't have their own domain
    }
    else
    {
        $this->Session->write( 'User.personal_domain', $domainUser [ 'User' ][ 'personal_domain' ] );
        // whatever you usually do, and now you know which user is connecting
    // you should use this info with whatever auth method you use to make sure
    // only that user can login to that domain
    }
}