I use custom error action. Application always returns 500 error code instead of 404 when it render error page
Yii::$app->errorHandler->exception is a yii\web\NotFoundHttpException Object in these situations but server sends 500 header not 404
What is wrong in my code? Why do I always receive 500 header from the server?
app/config/web.php
'components' => [
...
'errorHandler' => [
'errorAction' => 'site/error',
],
app/controllers/SiteController.php
public function actionError()
{
$url = Yii::$app->requestedRoute;
$newUrl = false;
$url = '/' . $url . '/';
if($redirect = \app\models\Redirect::find()->where(['hash' => md5($url)])->one()) {
...
$newUrl = '...';
}
if($newUrl) {
Yii::$app->response->redirect($newUrl, 301);
Yii::$app->end();
} else {
$exception = Yii::$app->errorHandler->exception;
return $this->render('error', ['exception' => $exception]);
}
}
app/views/site/error.php
<?php
use yii\helpers\Html;
?>
<div class="site-error">
<h1><?= Html::encode($exception->getName()) ?></h1>
<div class="alert alert-danger">
<?= Html::encode($exception->getMessage()) ?>
</div>
</div>
logs
2017-05-01 18:20:21 [127.0.0.1][-][54be31cgbi082k3uc37btzf47][trace][yii\web\Application::handleRequest] Route requested: 'sdhsdhsdgds8645733478'
2017-05-01 18:20:21 [127.0.0.1][-][54be31cgbi082k3uc37btzf47][error][yii\web\HttpException:404] exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "sdhsdhsdgds8645733478".' in C:\xampp\htdocs\site.dev\yii_site\vendor\yiisoft\yii2\base\Module.php:532
Stack trace:
#0 C:\xampp\htdocs\site.dev\yii_site\vendor\yiisoft\yii2\web\Application.php(102): yii\base\Module->runAction('sdhsdhsdgds8645...', Array)
#1 C:\xampp\htdocs\site.dev\yii_site\vendor\yiisoft\yii2\base\Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#2 C:\xampp\htdocs\site.dev\site\index.php(6): yii\base\Application->run()
#3 {main}
Next exception 'yii\web\NotFoundHttpException' with message 'Page not found.' in C:\xampp\htdocs\site.dev\yii_site\vendor\yiisoft\yii2\web\Application.php:114
Stack trace:
#0 C:\xampp\htdocs\site.dev\yii_site\vendor\yiisoft\yii2\base\Application.php(380): yii\web\Application->handleRequest(Object(yii\web\Request))
#1 C:\xampp\htdocs\site.dev\site\index.php(6): yii\base\Application->run()
#2 {main}