Como RewriteRules são para correspondências de expressões regulares em vez de substituições, a primeira linha em
RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
não é repetido. Portanto, você precisará de uma linha para cada quantidade de sublinhados, por exemplo,
RewriteRule ^(.*)_(.*)_(.*)_(.*)_(.*)_(.*)_(.*)$ /$1-$2-$3-$4-$5-$6-$7 [R=301,L]
RewriteRule ^(.*)_(.*)_(.*)_(.*)_(.*)_(.*)$ /$1-$2-$3-$4-$5-$6 [R=301,L]
RewriteRule ^(.*)_(.*)_(.*)_(.*)_(.*)$ /$1-$2-$3-$4-$5 [R=301,L]
RewriteRule ^(.*)_(.*)_(.*)_(.*)$ /$1-$2-$3-$4 [R=301,L]
RewriteRule ^(.*)_(.*)_(.*)$ /$1-$2-$3 [R=301,L]
RewriteRule ^(.*)_(.*)$ /$1-$2 [R=301,L]
substitui sublinhados de 1 a 5, resultando em
/Engineering_Common_Bricks/65mm_Class_B-Solid-Engineering-Brick-Price-Each
Assim, para 9 substituições, você precisará de mais algumas linhas no topo. O padrão será o mesmo, mas as expressões mais longas precisam se tornar as primeiras.
No entanto, isso substitui todos os sublinhados por traços (e redireciona após o último), portanto, você não deve ter nenhum nome de arquivo contendo sublinhados. Você também pode evitar que isso aconteça adicionando uma diretiva RewriteCond ANTES destas regras:
RewriteCond %{REQUEST_FILENAME} !-f