Решение

Итак, в общих чертах алгоритм достаточно простой. Нам нужно создать в админке плагин, который будет запускаться на начальном событии обработки поступившего запроса - OnHandleRequest. В этом плагине мы проверяем, есть ли в URI адресе страницы параметр id. Если есть, то вытаскивает числовое значение параметра, проверяем, что оно не пустое, а затем перенаправляем запрос по сгенерированному ЧПУ страницы. Код данного решения выглядит примерно так:


<?php
// Если мы в контексте админки или не в начале обработки запроса - завершаем работу плагина
if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
    return false;
}

// Получаем URI текущего адреса (не путаем URL и URI - URI это все после хоста)
$uri = $_SERVER['REQUEST_URI'];

// Если в URI содержится параметр id, вытаскиваем числовое значение параметра
if ((strpos($uri, '?id=') > -1) || (strpos($uri, '&id=') > -1)) {
    $id = preg_replace('/.*[?|&]id=([0-9]*).*/i', '$1', $uri);
    // Если ID пустой, устанавливаем его самостоятельно
    if (empty($id)) {
        $id = 1; // Если нужно - 1 заменить на ID ресурса для перенаправления
    }
    // Перенаправляем пользователя на сгенерированный редирект
    $modx->sendRedirect($modx->makeUrl($id));
}

Соответственно, берем данный скрипт, заходим в админку, создаем новый плагин с любым понравившемся наименованием - это не принципиально. Затем включаем плагин на запуск при событии OnHandleRequest. И все - должно заработать, вуаля!

Создаем в админке плагин Включаем отслеживание события

Рассуждения о целесообразности

Можно немного порассуждать о целесообразности данного действия, поскольку в самом MODX мы можем получать alias любого ресурса по его id [[~1]]. Однако, если мы размещаем ссылку вне сайта, в письме или гостевом посте, то данный функционал нам уже не поможет. Но тут есть следующий момент - можно поставить пакет Redirector, который при изменении alias ресурса сохраняет старые значения и автоматически перенаправляет пользователя на актуальный адрес.

Однако, с точки зрения SEO продвижения - не сказать, что сильно хорошо, когда одна и та же страница доступна по нескольким адресам. Конечно, можно закрыть все подобные страницы от индексации, но тогда поисковые системы не будут учитывать поведение пользователей на них. Да, это небольшой, но неприятный процент. Особенно если мы используем ссылки с id в качестве вечных ссылок - размещая их на ресурсах, где потом не будет возможности поменять адрес ссылки при изменении ЧПУ страницы. Поэтому лучше, чтобы система сама перенаправляла пользователя на актуальный адрес.

Буду рад, если оно и Вам будет полезно. Спасибо за прочтение!