Иногда после переработки или переезда сайта может возникнуть ситуация, когда на старом URL страниц формировались с нижним подчеркиванием (_), а на новом формируются через дефис/тире (-).

Можно, конечно, составить карту редиректов и заполнить её в .htaccess, или составить массив для редиректа через php, или заполнить редиректы через какой-нибудь модуль.

Но можно просто воспользоваться событием и делать автоматический редирект.

Ниже приведен пример, где я воспользовался событием  OnBeforeProlog, и если в ссылке были нижние подчеркивания, заменял их на тире, затем делал 301 редирект. В примере дополнительно стоит условие, что только если ссылка начинается с /catalog/. Если хотите можете просто его убрать или заменить на своё.

Весь представленный код размещаем в /local/php_interface/init.php.

<?php

$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('main', 'OnBeforeProlog', 'redirectUnderlineToDash');

function redirectUnderlineToDash()
{
    $request = \Bitrix\Main\Context::getCurrent()->getRequest();
    $uri = $request->getRequestUri();

    if (str_starts_with($uri, '/catalog/') && str_contains($uri, '_')) {
        // Разделяем URL на части: путь, параметры и якорь
        $urlParts = parse_url($uri);

        // Обрабатываем только путь (часть между доменом и параметрами)
        if (isset($urlParts['path']) && str_contains($urlParts['path'], '_')) {
            $newPath = str_replace('_', '-', $urlParts['path']);

            // Собираем новый URL
            $newUri = $newPath;

            // Добавляем параметры, если они были
            if (isset($urlParts['query'])) {
                $newUri .= '?' . $urlParts['query'];
            }

            // Добавляем якорь, если он был
            if (isset($urlParts['fragment'])) {
                $newUri .= '#' . $urlParts['fragment'];
            }

            // Делаем редирект только если путь изменился
            if ($newUri !== $uri) {
                LocalRedirect($newUri, true, '301 Moved Permanently');
            }
        }
    }
}