No seu rascunho, o primeiro RewriteCond verifica se a página existe ou não na raiz, mas não há verificação se a página existe ou não na pasta alternativa, portanto, muito é redirecionado. (O segundo RewriteCond é aparentemente algum tipo de verificação anti-loop [que não funciona porque este é um redirecionamento interno não um redirecionamento externo] ou algum tipo de acesso direto ao diretório alternativo [que, dependendo do seu uso, pode nem ser uma boa ideia]).
Uma coisa tão simples de afirmar parece surpreendentemente complicada de implementar. O melhor que pude encontrar (espero que alguém saiba melhor) é:
# parse the current local filename into parts we can manipulate
# (weird construct and regex in first RewriteCond are because
# mod_rewrite never does any variable substitution on the righthand side)
RewriteCond %{DOCUMENT_ROOT},%{REQUEST_FILENAME} ^([^,]*),/*(.*)/+(.*)$
RewriteRule ^ - [E=CURPATH:/%2,E=CURNAME:%3]
# allow direct access to the alternate folder
# (omit this entire ruleset if that's not desired)
RewriteCond %{ENV:CURPATH} !^/*legacy(?:/|$)
RewriteRule ^ - [L]
# do the checks and make the change if necessary
RewriteCond %{DOCUMENT_ROOT}/%{ENV:CURPATH}/%{ENV:CURNAME} !-f
RewriteCond %{DOCUMENT_ROOT}/legacy/%{ENV:CURPATH}/%{ENV:CURNAME} -f
RewriteRule ^ /legacy/%{ENV:CURPATH}/%{ENV:CURNAME} [L]
(Note que isto é um pouco mais do que apenas uma solução para seu problema declarado. Ele também tenta ser mais geral: trabalhando em todos os subdiretórios, trabalhando mesmo quando barras são dobradas, e trabalhando em diferentes Apaches com configurações sutilmente diferentes). / p>