Have you ever consider to use rewrire_rules_array
filter to alter $rewrite_rules?
/**
* Example of Changing All Rewrite Rules
*
* @param array $rewrite_rules The compiled array of rewrite rules.
* @return array The compiled array of rewrite rules (altered).
*/
function wpse_263624_rewrite_rules_example( $rewrite_rules ) {
$prefixes = array( 'otro', 'esto' );
$prefix_regexp = '(' . implode( '|', $prefixes ) . ')/';
$new_rewrite_rules = array();
$match_pattern = '/\$matches\[(\d)\]/si';
foreach ( $rewrite_rules as $rewrite_rule => $match ) {
// Incrementing $match becaouse prefixes goes as capturing group.
$new_match = preg_replace_callback( $match_pattern , function( $m ){
return sprintf('$matches[%d]', $m[1] + 1);
}, $match);
// Adding Prefix Group and New Value for our match.
$new_rewrite_rules[ $prefix_regexp . $rewrite_rule ] = $new_match;
}
return $new_rewrite_rules;
}
add_filter( 'rewrite_rules_array', 'wpse_263624_rewrite_rules_example' );
It ends up in something like this..