Url rewriting 将404页重定向到主页Zend2

Url rewriting 将404页重定向到主页Zend2,url-rewriting,zend-framework2,Url Rewriting,Zend Framework2,在zend 2中,当控制器操作中没有url匹配时,它会将其发送到404页面 现在我希望所有404重定向到主页。下面是module.config.php文件中的代码 不知道在哪里放置任何操作,这些操作将在调用任何404 url时自动调用 'view_manager' => array( 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype'

在zend 2中,当控制器操作中没有url匹配时,它会将其发送到404页面

现在我希望所有404重定向到主页。下面是module.config.php文件中的代码

不知道在哪里放置任何操作,这些操作将在调用任何404 url时自动调用

'view_manager' => array(
    'display_not_found_reason' => true,
    'display_exceptions'       => true,
    'doctype'                  => 'HTML5',
    'not_found_template'       => 'error/404',
    'exception_template'       => 'error/index',
    'template_map' => array(
        'application/layout'           => __DIR__ . '/../view/layout/layout.phtml',
        'application/index/index'     => __DIR__ .     '/../view/application/index/index.phtml',
        'error/404'               => __DIR__ . '/../view/error/404.phtml',
        'error/index'             => __DIR__ . '/../view/error/index.phtml',
    ),

一个简单的事件侦听器,以高优先级进行侦听,就足够了

没有以任何方式测试,但是它应该让您了解如何拦截错误

// Module.php
public function onBootstrap(MvcEvent $event)
{
    $application = $event->getApplication();
    $eventManager = $application->getEventManager();

    $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function($e) {
        $error = $e->getError();
        switch ($error) {
            case Application::ERROR_CONTROLLER_NOT_FOUND:
            case Application::ERROR_CONTROLLER_INVALID:
            case Application::ERROR_ROUTER_NO_MATCH:

                $response = $event->getResponse();
                $response->getHeaders()->addHeaderLine('Location', '/home');
                $response->setStatusCode(302);

                return $response;
            break;
        }
    }, 100);
} 

我还建议仔细查看
Zend\Mvc\View\Http\RouteNotFoundStrategy
中的代码,因为这是呈现
404
模板的“默认”侦听器。上面的操作与前面的操作相同,它只返回响应(带有重定向),而不是渲染视图模型。

我们不能用简单的方法来实现这一点。而不是为其添加类等this@RahulTailwal对不起,我不明白;在我的示例中没有新类。上面的代码将在现有
Module.php
onBoostrap
方法中。我没有Module.php文件。它是同一个module.config.php文件,但它只有一个routing配置数组。我想用这个文件做点什么。不,它们是不同的,您将拥有一个
Module.php
类。这是公平的。