Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何让Zend Route根据域名使用不同的模块_Php_Zend Framework_Zend Route - Fatal编程技术网

Php 如何让Zend Route根据域名使用不同的模块

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

我想设置多个域名来使用同一个框架,但我似乎无法让zend的路由器屈从于我的意愿

有很多使用子域的例子,但是试图让它们在整个域中工作似乎并不像我期望的那样有效

这是我来过的最近的一次,但似乎不起作用:

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
形式的路由。我想我们必须定义额外的路线,并将它们全部链接在一起。一旦我们开始进入所有组合的交叉产品,考虑使用模式将主机名称路由缩为一个单独的路由是有意义的。然后,将有更少的组合处理。