After fighting with Apache for a while I’ve finally managed to get a redirect from a users public_html to a new domain.

The main problem is how mod_rewrite and mod_userdir interact, but the magic syntax to put in the .htaccess inside the user’s public_html is this:

RewriteEngine On
RewriteBase /~user
RewriteRule ^(.*)$ http://newdomain.example.com/$1