Yii1 выдаёт CHttpException вместо рендера 404 страницы?

При использовании фреймворка Yii1, в некоторых случаях может возникать ситуация, когда вместо отображения страницы ошибки 404 (Page Not Found) выдается исключение типа CHttpException.

Прежде всего, следует изучить структуру вашего приложения, чтобы понять, почему возникает подобная проблема. Yii1 основан на шаблоне Model-View-Controller (MVC), где контроллеры обрабатывают запросы и решают, какой представление (View) должно быть отображено. Если запрашиваемая страница не существует, Yii1 должен обработать эту ситуацию и отобразить страницу ошибки 404.

Существует несколько причин, по которым вы можете получать CHttpException вместо страницы ошибки 404:

1. Неправильная настройка маршрутизации: Убедитесь, что у вас правильно настроены правила URL-маршрутизации в файле конфигурации вашего приложения (обычно protected/config/main.php). Проверьте, что вы имеете правило для обработки несуществующих страниц, которое должно перенаправлять на ваше действие или контроллер, отвечающий за отображение ошибки 404.

Пример:

    'urlManager' => [
        'urlFormat' => 'path',
        'rules' => [
            '<controller:w+>/<action:w+>' => '<controller>/<action>',
            'error' => 'site/error', // правило для отображения ошибки 404
        ],
    ],

2. Отсутствие действия для обработки ошибки 404: Проверьте, что у вас существует соответствующее действие в вашем контроллере, отвечающем за отображение ошибки (например, SiteController).

Пример:

    class SiteController extends CController
    {
        // ...

        public function actionError()
        {
            if ($error = Yii::app()->errorHandler->error) {
                $this->render('error', $error);
            }
        }
    }

В данном примере, действие actionError обрабатывает ошибку 404 и передает ее в представление error.php для отображения пользователю.

3. Отсутствие представления для ошибки 404: Убедитесь, что у вас существует соответствующий шаблон (представление) для отображения ошибки 404. Создайте файл error.php в каталоге views/site/ вашего приложения и добавьте в него требуемую разметку или сообщение об ошибке.

Пример:

    <?php $this->pageTitle = 'Page Not Found'; ?>
    <h1>Page Not Found</h1>
    <p>The requested page does not exist.</p>

4. Некорректная обработка ошибки в DNS-сервере: В некоторых случаях, сервер DNS может вмешиваться в обработку 404 ошибки. Проверьте настройки вашего сервера, чтобы убедиться, что он правильно настроен для обработки несуществующих страниц и отображения страницы ошибки 404.

Если вы исправили все причины, указанные выше, и все еще получаете CHttpException вместо страницы ошибки 404, рекомендуется проверить логи и обратиться к сообщению об ошибке, чтобы получить более подробную информацию о том, что может вызывать проблему.

В целом, убедитесь, что вы правильно настроили маршрутизацию, добавили соответствующее действие в ваш контроллер, создали представление для ошибки 404 и проверили настройки вашего сервера.