WP Redirect From /%postname%.html To /%category%/%postname%/

Solution:1

It should be done with this plugin

SEO Redirection Plugin – 301 Redirect Manager

Solution:2

For the time being I don’t use Nginx redirects, I use this

add_filter( ‘404_template’, ‘custom_redirect_to_category’ );

function custom_redirect_to_category($template) {

if ( ! is_404() ){
return $template;
}

global $wp_rewrite;
global $wp_query;

if ( ‘/%category%/%postname%/’ !== $wp_rewrite->permalink_structure ){
return $template;
}

if ( ! $post = get_page_by_path( $wp_query->query[‘category_name’], OBJECT, ‘post’ ) ){
return $template;
}

$permalink = get_permalink( $post->ID );

wp_redirect( $permalink, 301 );
exit;

}