Разобрались со своими редиректами? Как я вижу, с .

Разобрались со своими редиректами? Как я вижу, с .html нормально редирект идет.

www.narcononmsk.ru/syin-narkoman?q=syin-narkoman.html, хотя изначально там переход

Здесь у вас чуть сложнее будет. Вы настроили серверные правила редиректа. То есть при обращении к страницам с .html, дело до MODX-а еще не доходит. Сервер видит запрос к документу с суффиксом .html и редиректит по правилу. Далее уже вступает в дело MODX. Но это правило анализирует имя файла, к которому идет запрос, а не параметры. В запросе www.narcononmsk.ru/syin-narkoman?q=syin-narkoman.html syin-narkoman.html — не имя файла, а значение переменной q. Сервер его не проверяет и не редиректит. То есть он отдает запрос MODX-у. Но q — это зарезервированная переменная MODX-а, которую он использует для определения запрошенного документа, и хотя у вас запрошена страница syin-narkoman, которая для MODX-а по сути имеется, переменная q перебивает этот адрес, заставляя MODX думать, что запрошена страница syin-narkoman.html. Но этой страницы для MODX-а не имеется (вы сами у себя удалили суффиксы .html). Про правила редиректа на стороне веб-сервера MODX ничего не знает, и совершенно их не использует, а отдает законную 404-ую в ответ на ненайденную страницу.

Резюме: безусловно надо еще перестраховываться с редиректами на стороне самого MODX-а. Создайте плагин на событие OnPageNotFound, и настройте те же правила на регулярках, только на php, используя переменную $modx->resourceIdentifier и метод $modx->sendRedirect($url);

Примерный код плагина:

if(!empty($modx->resource) && is_object($modx->resource)){
    return;
}

if(preg_match('/(.+)\.html([\?\#$]?.*)/', $modx->resourceIdentifier, $match)){
    $modx->sendRedirect("{$1}{$2}");
    return;
}