Лучше направить запросы в отдельный скрипт и там уже выполнять замену и редирект.
RewriteRule ^product/([^/]+)\.html$ /replace.php [L]
/replace.php
<?php
if (preg_match('#^/product/([^/]+)\.html#', $_SERVER['REQUEST_URI'], $match)) {
$str = $match[1];
$str = str_replace('ja', 'ya', $str);
$str = str_replace('_', '-', $str);
header("Location: https://site.ru/shop/{$str}/", true, 301);
die();
}
Если пытаться производить такую замену только средствами .htaccess будет громоздкий костыль.
spoilerRewriteCond ya$1 ^(ya)(.*)ja(.*)|^ya(.*)
RewriteCond -%2%1%3%4 ^(-)(.*)_(.*)|^-(.*)
RewriteCond -%2%1%3%4 ^(-)(.*)_(.*)|^-(.*)
RewriteRule ^product/([^/]+)\.html$ https://site.ru/shop/%2%1%3%4/ [R=301,L]