如何在Zend Framework中路由动态子域?

时间:2012-08-08 21:15:10

标签: php apache zend-framework subdomain zend-route

我在zend_router_hostname上遇到'动态子域'的问题,我有类似的代码(我没有像这样的子域但是使用子域作为路由参数):

protected function _initRoutes() {
        $front = Zend_Controller_Front::getInstance();
        $router = $front->getRouter();
        $config = $this->getOptions();
        Zend_Registry::set("config", $config);
        $routerHost = new Zend_Controller_Router_Hostname(':language.mysite.local',
                        array('controller' => 'index',
                            'action' => 'index',
                            'language'=>'pl')
);
        $router->addDefaultRoutes();
        $routes = $router->getRoutes();
        foreach ($routes as $key => $routeEntry) {
            $router->addRoute($key, $routeHost->chain($routeEntry));
        }
    }

但是当我尝试调用例如:pl.mysite.local时,我发现服务器未找到错误。 我的/ etc / hosts文件是:

127.0.0.1       localhost
127.0.2.1       mysite.local
127.0.3.1       mysite.dev
127.0.4.1       mysite.production

我的vhost配置是:

VirtualHost *:80>
   DocumentRoot "/var/www/mysite/public"
   ServerName mysite.local
   ServerAlias *.mysite.local
   # This should be omitted in the production environment
   SetEnv APPLICATION_ENV development
   <Directory "/var/www/mysite/public">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>

</VirtualHost>

我尝试使用带有以下条目的dnsmasq:

address=/local/127.0.0.1

但问题仍然存在,我不知道如何解决这种情况,任何线索我做错了什么?

1 个答案:

答案 0 :(得分:2)

无法在/ etc / hosts中添加通配符,但在我们的案例中也是必需的。 但是,这是如何实现的:

安装dnsmasq

然后,

cp /usr/share/doc/dnsmasq-base/examples/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

然后,编辑您的/usr/local/etc/dnsmasq.conf并添加:

address=/mysite.local/127.0.0.1
listen-address=127.0.0.1

启动DNSMASQ:

~$ sudo ./usr/local/sbin/dnsmasq

此外,使用Zend_Controller_Router_Route_Hostname

而不是使用Zend_Controller_Router_Hostname

浏览文档,你应该没问题!

$toRoute = new Zend_Controller_Router_Route_Hostname(
    ':language.mysite.local',
    array(
        'controller' => 'index',
        'action' => 'index',
        'language' => 'pl')
    ) );

PS:别忘了在/etc/resolv.conf中提到名称服务器为127.0.0.1。有时,重启系统有帮助!

享受编码! :)