Redirection is working with [NC] instead of [R=301,L]
Do you mean [NC]
instead of [R=301,L] or
in addition to [R=301,L]? If it's an added NC then you need to change the pattern to match the actual casing of the URL. If you've removed the [R=301,L] and the rule appears to work, where before it didn't, then there's actually some other, later rule successfully creating a redirect.
When a rule creates an external redirect, it's easy to test it by changing the target to something like
www.example.com/hardeharhar.html
and then verify that that's what your address bar says.
:: wait, stop, rewind ::
product.php?id=$1
Is that supposed to be your
target? That won't work. In combination with the missing RewriteBase, it creates a redirect to a filepath that you'll probably find in your Error Logs. By the usuall yawn-provoking coincidence, I experimented on this just a few days ago.
The target of an external redirect should always be the full protocol-plus-domain. For one, it eliminates the risk of needing a second redirect later if the request used the wrong form; for another, it saves the server the trouble of checking what the requested host actually was.