Из заголовка, думаю, мало что понятно. Попробую пояснить.

При переезде с одного движка на другой, скорее всего меняются урлы на сайте. Нужно настроить редиректы на сайте. Приходят сеошники с экселем в котором: в одном столбце список старых урлов, в другом список новых. В третьем столбце у них формула что-то вроде: =СЦЕПИТЬ($D$2;A3;" ";C3;" ";$E$2), которая даёт примерно такую строку в итоге:

    RewriteRule ^/link1/$ /link2/ [L,R=301]

И в принципе эта схема рабочая. Пока в первом столбце не появятся урлы с гет параметрами(это те, которые следуют после знака «?»). Для таких урлов надо пользовать RewriteCond, в который выносить гет-параметры. Наверное, как-то можно это решить и в экселе, но мы пойдём путём джедая — обработаем список уже готовых урлов на PHP.

Я написал PHP скрипт, который берёт список редиректов, обрабатывает их и отдаёт в рабочем варианте.

В файле list список кривых редиректов, разделенных переносом строки.

<?php
 
/*
Before:
RewriteRule ^search.php?color=18 /search/?set_filter=y&af_106_414524117=Y&af_132_257141749=Y [L,R=301]
RewriteRule ^catalog/collect.php?ELEMENT_ID=144 /sublimia/ [L,R=301]
 
After:
RewriteCond %{QUERY_STRING} ^color=18$
RewriteRule ^search.php$ /search/?set_filter=y&af_106_414524117=Y&af_132_257141749=Y [L,R=301]
 
RewriteCond %{QUERY_STRING} ^ELEMENT_ID=144$
RewriteRule ^catalog/collect.php$ /sublimia/? [L,R=301]
*/
 
$rules = [];
if(($file = file('list')) !== false){
    foreach ($file as $rule) {
        list($rRule, $where, $to, $ruleOptions) = explode(' ', $rule);
        if(($pos = strpos($where, '?')) === false){
            $rules[] = sprintf(
                '%s %s %s %s',
                    $rRule,
                    $where . (strpos($where, '$') == false ? '$' : ''),
                    $to,
                    $ruleOptions
            );
        }else{
            $rules[] = sprintf(
                '<br/ >RewriteCond &#37;{QUERY_STRING} ^%s$<br/ >%s ^%s$ %s %s<br />',
                substr($where, $pos + 1),
                $rRule,
                substr($where, 1, $pos - 1),
                $to . (strpos($to, '?') === false ? '?' : ''),
                $ruleOptions
            );
        }
    }
}
 
echo implode('<br />', $rules);

Запускаем этот скрипт и копируем результат с свой .htaccess.

Не думаю, что это много кому понадобится, но лично мне экономило пару раз время.