No se si lo notaste o no, pero tal vez el problema (casi seguro que si)... en la url de destino yo coloque a modo de ejemplo
wp-content/uploads
/2/ + url antigua
el formato que tu mencionaste era
wp-content/uploads
/site/2/ + url antigua
Si tu usaste mi formato en lugar de ajustarlo al tuyo, la url de destino jamas coincidirá por lo que no encontrara el archivo.
en el código use esta linea para evitar un bucle, pero es para que no re-direccione si el archivo buscado es encontrado.
RewriteCond %{REQUEST_FILENAME} !-f
básicamente lo que dice es, re-direcciona siempre que el archivo buscado no exista y sea en el folder wp-content/uploads.
Pero no cai en cuenta que si no existe volverá a intentar re-direccionar agregando
/2/ de forma infinita, por lo que el servidor marca error.
Fue un error de mi lógica, te agrego una nueva linea que evitara el bucle infinito, solo permitirá se re-direccione una vez encuentre o no el archivo.
Cita: RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/wp-content/uploads
RewriteCond %{REQUEST_URI} !^/wp-content/uploads/2/
RewriteRule ^wp-content/uploads/(.*)$ wp-content/uploads/2/$1 [R=301,L]
revisa la logica no me falte algo
linea 1 .- si el archivo no existe
linea 2 .- el archivo buscado esta en el folder ^/wp-content/uploads
linea 3 .- el archivo buscado NO es en el folder !^/wp-content/uploads/2/
linea 4 .- ejecuta la redireccion.