Hi Nakul
Here is my stab at question 1, my methodology is trial and error so if any guru's want to take another shot at it please do so. Here is a nice 301 reference page lots of examples
RewriteEngine On
RewriteRule ^(.)_red-widgets-cid-1234.html$ www.domain.com/red-widgets-cid-4567.html [R=301]
#Example 2
RewriteRule ^(.)_red-widgets-cid-1234+10.html$ www.domain.com/red-widgets-cid-6789.html [R=301]
#Example 3
RewriteRule ^(.*)_red-widgets-cid-1234+10+5.html$ www.domain.com/american-red-widgets-cid-6789+5.html [R=301,L]
We use ^ to denote start of string
We use $ to denote end of string
We use (.*)_ to look for a keyword. In the examples above we are looking for what each page name has in common
We use [R=301,L] for the Last rewrite, previous rules just use [R=301]
One thing that (maybe) needed is escaping the +signs in the string so like example 3 would be
^(.*)_red-widgets-cid-1234+10+5.html$ www.domain.com/american-red-widgets-cid-6789+5.html
Also I may missed a wildcard on some of these....
^(.)_red-widgets-cid-1234+10+5(.).html$ www.domain.com/american-red-widgets-cid-6789+5.html
Question 2:
Canonical to self canonical tag is okay.
This = That and That = That ..........Okay
This = That and That = The ..........Not Okay
Hope that puts you on track