Why not use Redirect or RedirectMatch at all?
Because you're on shared hosting.
mod_alias (Redirect by that name) is a perfectly good way to do a simple redirect-- the kind that's done with a conditionless RewriteRule--
except that when it is not your own server, you have no control over the execution order of the modules. It is essential that all redirects (lower case) take place before all rewrites (lower case). If you don't know whether mod_alias executes before or after mod_rewrite, the only way to enforce the correct order is to do everything in the same module.
You said at the beginning
All the files should match up 1:1.
Now, if you are entirely shutting down the old domain, then in fact it
is OK to use mod_alias, because the redirect/rewrite part of the old domain's htaccess will be stripped down to two lines. (You may want to keep the access-control parts-- the Deny from... directives-- so you don't waste time redirecting people you're about to lock out.)
If the new domain is in the same userspace as the old domain, these two rules MUST go in the old domain's htaccess, not in anything shared by both domains.
First line:
RedirectMatch 301 ^(([^./]+/)*)index\.html$ http://www.example.com/$1
Second line:
RedirectMatch 301 ^(.*)$ http://www.example.com/$1
In the old domain's htaccess you do not need to look at hosts, requests or anything else, because everything is getting shipped straight over to the new domain.
Do not cut and paste. I haven't used mod_alias in a while so I may have forgotten some crucial detail of the syntax.
Q: Did I just flatly contradict something I said earlier in this very thread?
A: Uhm, yes, I did. But it ONLY applies when you are completely shutting down an old domain and moving to a new one, AND the quoted rules are in a place that is only visible to the old domain.
If, on the other hand, your two domains are in the same userspace
and there are no other domains, then there is an even simpler method. For this one you revert to mod_rewrite. But let's pause for now ;)