我在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
但问题仍然存在,我不知道如何解决这种情况,任何线索我做错了什么?
答案 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。有时,重启系统有帮助!
享受编码! :)