This is how I did it, in two steps:
1. In .htaccess, comment out:
#RewriteRule ^index.php /wpmu/wp-inst/index.php [L]
#RewriteRule ^([_0-9a-zA-Z-]+)/ /wpmu/wp-inst/index.php [L]
#RewriteRule ^([_0-9a-zA-Z-]+) $1/ [R,L]
2. Replace the code in wpmu/wp-inst/index.php with:
$pages = array('/', '/?');
$hosts = array('www.domain.com', 'domain.com');
if (in_array($_SERVER[REQUEST_URI], $pages) && in_array($_SERVER['HTTP_HOST'], $hosts)) {
$page = 'http://domain.com/index.php';
header("Location: $page");
}
else {
define('WP_USE_THEMES', true);
require('./wp-blog-header.php');
}
Step 1 gets rid of the index.php and catchall rewrites so you can use your own html, php, etc. files in your root dir.
Step 2 handles the case where user doesn't enter any file, but simply "http://yourdomain.com". Getting rid of that rewrite from .htaccess will break your subdomain redirection, so you have to edit the index.php file to catch when the request is for http://www.domain.com or domain.com, while user.domain.com gets treated as normal.