Url rewriting 将404页重定向到主页Zend2
在zend 2中,当控制器操作中没有url匹配时,它会将其发送到404页面 现在我希望所有404重定向到主页。下面是module.config.php文件中的代码 不知道在哪里放置任何操作,这些操作将在调用任何404 url时自动调用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'
'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
类。这是公平的。