.htaccess rule to redirect old URLs to new structure [closed]

Am I missing something simple?

You need the L flag (to prevent further processing) and this directive should go at the very top of your existing .htaccess file (ie. before the # BEGIN WordPress section).

Unless you have already defined an appropriate RewriteBase directive (the WordPress front-controller usually has this), then you also need to prefix the substitution string with a slash (although it is recommended to do this anyway for external redirects).

Otherwise, your regex and substitution string should work OK.

In other words, at the top of your file:

RewriteRule ^(.*)/item/(.*)-([0-9]+)$ /$1/item/$3 [R=302,L]

Test with 302 (temporary) redirects (to avoid caching issues) and change to a 301 only when you have confirmed it works as intended.

You will need to clear your browser cache before testing.