You can try this
RewriteEngine On
RewriteBase / #modify rewrite base according to your directory structure
RewriteRule buy-(.+)-category-(.+)/(.+)$ /$1-$2/$3 [L,R=301]
Update
I think if you place the above rewrite statements above your original .htaccess code (after rewriteengine on), it'll map your request to the right page, i.e., /page/page.php
with your URL in $_GET['uri']
, i.e., [uri] => productname-item/rest-of-url.html
. In that page you can parse the URL (like probably you're already doing) and extract the values.
Final .htaccess code
Options +FollowSymLinks
RewriteEngine On
# ######### new code ###
RewriteBase / #modify rewrite base according to your directory structure
RewriteRule buy-(.+)-category-(.+)/(.+)$ /$1-$2/$3 [L,R=301]
# ######################
# this rule sends root requests to index.html, which is then sent by the next rule to /php/page.php
# sends all requests for .html files to page.php for service
RewriteCond %{REQUEST_URI} !(.*)/sitemap.xml
RewriteCond %{REQUEST_URI} !(.*)/xml
RewriteCond %{REQUEST_URI} !(.*)/mockups
RewriteCond %{REQUEST_URI} !(.*)/php
RewriteCond %{REQUEST_URI} !(.*)/rss
RewriteRule ^(.*).html$ /php/page.php?uri=$1 [NC]
### ^ the most important rule