Как убрать страницы с 404 из карты сайта на Yii?

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

1. Шаг 1: Создайте контроллер ErrorsController
Создайте новый контроллер с именем ErrorsController в папке protected/controllers. В этом контроллере мы определим действие "error", которое будет обрабатывать ошибки 404.

class ErrorsController extends CController
{
    public function actionError()
    {
        // Обрабатываем ошибку 404
        if ($error = Yii::app()->errorHandler->error) {
            if ($error['code'] === 404) {
                // Возвращаем пустой результат, чтобы страница с ошибкой 404 не была добавлена в карту сайта
                Yii::app()->end();
            }
        }
    }
}

2. Шаг 2: Настройка маршрутизации ошибок
Отредактируйте файл protected/config/main.php и добавьте новые правила маршрута для ошибок в секцию 'rules' компонента 'urlManager':

'urlManager' => array(
    'urlFormat' => 'path',
    'rules' => array(
        // Различные правила маршрутизации...

        // Маршрут для страницы ошибки 404
        'error' => 'errors/error',
    ),
),

Теперь все запросы на сайт, которые приводят к ошибке 404, будут перенаправляться на действие "error" контроллера ErrorsController.

3. Шаг 3: Отключение отображения ошибки 404
Отредактируйте файл protected/views/layouts/main.php или другой файл макета вашей страницы и удалите или закомментируйте вызов виджета CErrorWidget, который отображает страницу с ошибкой:

// $this->widget('zii.widgets.CDetailView', array(
//     'data'=>$error,
// ));

Теперь при возникновении ошибки 404 страница с этой ошибкой не будет отображаться, а также не будет добавлена в карту сайта.

Следуя этим шагам, вы можете убрать страницы с ошибкой 404 из карты сайта в Yii.