我花了好几个小时试图找到解决方案,但似乎没有那么多。
我目前有admin.domain.com
指向管理模块,这很容易做到:
$adminRoute = new Zend_Controller_Router_Route_Hostname(
'admin.domain.com', array(
'module' => 'admin'
)
);
$router
->addRoute('admin', $adminRoute->chain(
new Zend_Controller_Router_Route(
':controller/:action/*',
array(
'controller' => 'index',
'action' => 'index'
))
));
所有其他路由都将按照默认路由工作,以便www.domain.com/module/controller
和www.domain.com/controller
都按预期工作。
但是,如果我当前位于admin
模块中并想要汇总指向www.domain.com
路线的网址,那么如何做到这一点?
不幸的是,这并不是将默认路由设为www.domain.com
的主机名路由的简单情况,因为这样您就不会从路径中的“可选”模块参数中受益。例如。
$wwwRoute = new Zend_Controller_Router_Route_Hostname(
'www.domain.com', array(
'module' => 'default'
)
);
$router
->addRoute('default', $wwwRoute->chain(
new Zend_Controller_Router_Route(
':module/:controller/:action/*',
array(
'controller' => 'index',
'action' => 'index'
))
));
只需使用www.domain.com/default/controller/action
格式而不是www.domain.com/controller/action
文档建议默认路由使用Zend_Controller_Router_Route_Module
,但我已经尝试了,似乎还有更多不仅仅是。
有什么想法吗?
编辑:我怀疑你需要做一种方式或者另一种方式,即在子域上拥有所有模块,然后严格按照/controller/action/*
路由请求,或者将模块作为路由的一部分路径。否则,一个模块可以通过两个URL访问 - module.domain.com
和www.domain.com/module
- 显然有一些方法可以解决这个问题,当然,你可以为每个模块设置特定的路由,从而不依赖于'默认Zend路由的可选'模块功能。