Php 如何让Zend Route根据域名使用不同的模块
我想设置多个域名来使用同一个框架,但我似乎无法让zend的路由器屈从于我的意愿 有很多使用子域的例子,但是试图让它们在整个域中工作似乎并不像我期望的那样有效 这是我来过的最近的一次,但似乎不起作用:Php 如何让Zend Route根据域名使用不同的模块,php,zend-framework,zend-route,Php,Zend Framework,Zend Route,我想设置多个域名来使用同一个框架,但我似乎无法让zend的路由器屈从于我的意愿 有很多使用子域的例子,但是试图让它们在整个域中工作似乎并不像我期望的那样有效 这是我来过的最近的一次,但似乎不起作用: resources.router.routes.mysite.type = "Zend_Controller_Router_Route_Hostname" resources.router.routes.mysite.route = "www.mysite.com" resources.router
resources.router.routes.mysite.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.mysite.route = "www.mysite.com"
resources.router.routes.mysite.defaults.module = "mysite"
resources.router.routes.mysite1.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.mysite1.route = "www.mysite1.com"
resources.router.routes.mysite1.defaults.module = "mysite1"
有什么建议吗?我以前是这样做的,根据web服务器配置的
$\u SERVER['SERVER\u NAME']
的当前值,实际使用了不同的配置文件。(HTTP_HOST
是客户端发送的主机。)
通过使用,您可能可以在单个文件中执行相同的操作。基于此,您似乎需要添加路径路由,然后将该路径路由链接到主机名路由
因此,也许类似于:
; abstract routes to be used in chaining
resources.router.routes.plain.type = "Zend_Controller_Router_Route"
resources.router.routes.plain.abstract = true
resources.router.routes.plain.route = "/:controller/:action"
resources.router.routes.plain.defaults.controller = "index"
resources.router.routes.plain.defaults.action = "index"
resources.router.routes.mysite.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.mysite.abstract = true
resources.router.routes.mysite.route = "www.mysite.com"
resources.router.routes.mysite.defaults.module = "mysite"
resources.router.routes.mysite1.type = "Zend_Controller_Router_Route_Hostname"
resources.router.routes.mysite1.abstract = true
resources.router.routes.mysite1.route = "www.mysite1.com"
resources.router.routes.mysite1.defaults.module = "mysite1"
; now the actual (non-abstract) routes are chains of the abstract ones
resources.router.routes.mysite-plain.type = "Zend_Controller_Router_Route_Chain"
resources.router.routes.mysite-plain.chain = "mysite,plain"
resources.router.routes.mysite1-plain.type = "Zend_Controller_Router_Route_Chain"
resources.router.routes.mysite1-plain.chain = "mysite1,plain"
实际上,我们可能会使用一个占位符(如:site
)将两个抽象的mysiteX路由折叠成一个抽象路由,以代表mysiteX
值并设置一些要求/默认值,但我认为这传达了这个想法
未测试-实际上我以前从未使用过链接路由-但似乎需要这样的东西才能使主机名路由工作。以什么方式不工作?模块是否未设置?回想一下,文档建议将路径路由链接到主机名路由。也许由于缺少链接,模块可以被设置在其他地方?大声想想……没错,模块没有被设置——它只是默认为“非模块化”/“应用程序/控制器”目录中的控制器。太棒了,谢谢!这就是它,除了一件事:
mysite-plain
需要用逗号分隔,就像mysite,plain
一样。另外,不要忘记先注册模块resources.modules[]=“mysite”
太好了,很高兴它有帮助。为完整起见,我将更新答案正文以包含您的更正/注释。干杯由于某些原因,一旦添加其他参数,此方法就会失败,并返回到默认模块。。示例:www.mysite.com/index/index
转到mysite模块。。。但是www.mysite.com/index/index/p/2
进入默认模块。我想这是因为我们的普通
路由只包含/:controller/:action
形式的路由。我想我们必须定义额外的路线,并将它们全部链接在一起。一旦我们开始进入所有组合的交叉产品,考虑使用模式将主机名称路由缩为一个单独的路由是有意义的。然后,将有更少的组合处理。