使用ZF创建子域名站点

在开发Web站点的时候,经常会碰到提供子域名的服务之类的问题,而在Zend Framework的开发过程中,所有的链接都会被重写到index.php上。这样在实现子域名的开发上就有些麻烦,但在Zend Framework 1.7中,在一个新的路由器专门用来处理子域名的映射,Zend_Controller_Router_Route_Hostname。她的工作原理是这样的:

首页通过Zend_Controller_Router_Route_Hostname规则找到相对应的域名,根据域名你可以产生相关变量,如:控制器名称;用户ID等。这找到相对应的规则后,再对路径进行了路由规则进行匹配。就是说通过两次路由规则找到相对应的参数

假如有这样一个地址,gonefish.users.example.com/profile。创建如下规则:

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    ‘:username.users.example.com’,
        array(
            ‘controller’ => ‘profile’,
            ‘action’ => ‘userinfo’
        )
    );

$plainPathRoute = new Zend_Controller_Router_Route_Static(”);
$plainPathRoute2 = new Zend_Controller_Router_Route(
    ‘profile’,
    array(
        ‘action’ => ‘profile’
    ),
);

$router->addRoute(‘user’, $hostnameRoute->chain($plainPathRoute);
$router->addRoute(‘user’, $hostnameRoute->chain($plainPathRoute2);

第一种情况:访问gonefish.users.example.com。首先,路由系统先匹配gonefish.users.example.com域名,找到了控制名和动作名;然后再对后面的路径进行一次规则匹配,因为没有其它路径了,所以应用的是$plainPathRoute1路由规则。

第二种情况:访问gonefish.users.example.com/profile。首先,路由系统先匹配gonefish.users.example.com域名,找到了控制名和动作名;然后再对路径profile进行一次规则匹配,这样更新了动作名,即$plainPathRoute2的路由规则。

通过对访问地址进行两次路由规则的匹配来映射最终访问的方法。

分享到: 更多