Если тебе нужно перенаправить при условие
если не 404
и
и
то
То тебе не поможет .htaccess в принципе поскольку получить код ответа сервера нужно до перенаправления, из чего следует что при любом урле на сайте прийдется получить код ответа сервера. что в свою очередь сильно повлияет на производительность сайта.
А следовательно это не тот вариант
Самый легкий вариант решения проблемы с условием на 404
это в 404.php написать реврайты уже на php, они и пишутся легче и циклы у них менее странные.
В таком случае редиректы будут работать только если урл не найдет.
Теперь по твоей регулярке
ты наксячил
вопервых последовательность RewriteCond /your/docroot/%{REQUEST_FILENAME} !-f
во вторых собственно сама переменная.
RewriteCond %{REQUEST_URI} ^(.*)/dir1/(.*)$
# если строка содержит /dir1/
RewriteRule ^(.*)$ %1/dir2/%2 [R=301,L]
#Перенаправить все урлы с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL