Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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 子_路由时出现ZF2错误404_Php_Routes_Zend Framework2 - Fatal编程技术网

Php 子_路由时出现ZF2错误404

Php 子_路由时出现ZF2错误404,php,routes,zend-framework2,Php,Routes,Zend Framework2,这是我最后的机会。我试着寻找答案,但说真的,我看不出我做错了什么。。。 我正在尝试在网站上设置一个多域。 使用文字路由时,一切正常。 添加具有主机名路由的其他域时,仍然可以。 但当将子路由添加到该主机名路由时,父路由会触发404。 这是我的module.config: 'resources' => $resources, 'router' => array( 'routes' => array( 'example.com' => array(

这是我最后的机会。我试着寻找答案,但说真的,我看不出我做错了什么。。。 我正在尝试在网站上设置一个多域。 使用文字路由时,一切正常。 添加具有主机名路由的其他域时,仍然可以。 但当将子路由添加到该主机名路由时,父路由会触发404。 这是我的module.config:

'resources' => $resources,
'router' => array(
    'routes' => array(
        'example.com' => array(
            'type' => 'Zend\Mvc\Router\Http\Hostname',
            'options' => array(
                'route' => '[:subdomain.]:domain.:tld', // domain levels from right to left
                'contraints' => array(
                    'subdomain' => 'www',
                    'domain' => 'example',
                    'tld' => 'com',
                ),
                'defaults' => array(
                    '__NAMESPACE__' => 'Application\Controller',
                    'controller' => 'Index',
                    'action' => 'itdoc',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'customCatalog2' => array(
                    'type' => 'Zend\Mvc\Router\Http\Segment',
                    'options' => array(
                        'route' => '/custom-catalog',
                        'defaults' => array(
                            'action' => 'customCatalog',
                        ),
                    ),
                ),
当访问时,我得到一个404。 但儿童路线很好() 但是如果我注释掉子路由(并且可能终止),我可以访问根域

你知道我的代码有什么问题吗


谢谢

我测试了你的代码,事实上这很奇怪,但经过一些测试和阅读文档后,我发现了这一点

^ 我期待着这个组件,并在文档中发现:

'packages.zendframework.com' => array(
            'type' => 'Zend\Mvc\Router\Http\Hostname',
            'options' => array(
                'route' => ':4th.[:3rd.]:2nd.:1st', // domain levels from right to left
                'contraints' => array(
                    '4th' => 'packages',
                    '3rd' => '.*?', // optional 3rd level domain such as .ci, .dev or .test
                    '2nd' => 'zendframework',
                    '1st' => 'com',
                ),
                // Purposely omit default controller and action
                // to let the child routes control the route match
            ),
            // child route controllers may span multiple modules as desired
            'child_routes' => array(
                'index' => array(
                    'type' => 'Zend\Mvc\Router\Http\Literal',
                    'options' => array(
                        'route' => '/',
                        'defaults' => array(
                            'controller' => 'Package\Controller\Index',
                            'action' = > 'index',
                        ),
                    ),
                    'may_terminate' => true,
                ),
            ),
        ),
如您所见,它们有子路由,但声明的第一个路由是与此模式匹配的路由:
“/”
,这是您的主路由。您必须声明此路由等于下面的代码:

'defaults' => array(
                '__NAMESPACE__' => 'Application\Controller',
                'controller' => 'Index',
                'action' => 'itdoc',
            ),

之后,主路由是正确的,您可以继续使用其他子路由,只是主机名不是实际的主路由
'/'

对!!谢谢胡莉!我想通过“默认值”部分,它会工作的。我确实尝试了doc示例,但可能将“/”路由更改为一个孩子。希望这将有助于其他人澄清child_路线的工作原理。