Hola Zant,
Las reglas mod_rewrite con expresiones regulares siempre han sido un poco complicadas. En principio nginx aunque cachee los resultados, lo hace primero consultando resultados previos en Apache o copia en cache generada. Antes de ello, debe pasar por el módulo mod_rewrite de apache a más bajo nivel. En nuestro
modo de servidor compartido por lo tanto nginx sólo actúa como capa proxy y no como capa principal (ya que servimos con apache + nginx para dar posibilidad a otros módulos como mod_wsgi (para python), mod_passenger (para ruby), mod_php, etc).
Podemos ayudarte a resolver el problema proponiendote
dos soluciones:
1) Habilitar de forma temporal en tu virtualhost la directiva
RewriteLog de apache con un nivel apropiado que te permita entender mejor que es lo que esta sucediendo con las redirecciones.
Esta solución es la más apropiada, pero sólo puede activarse en el
VirtualHost y no mediante .htaccess ya que es una directiva relativa al VirtualHost y necesita permisos root para editar la configuración de Apache. No la activamos ni la ofrecemos por defecto, porque requiere muchas escrituras adicionales de apache en cada petición y por lo general degrada el rendimiento.
Podríamos habilitarla durante algún tiempo para que puedas solucionar el problema o entender donde está fallando alguna regla de mod_rewrite. Una vez solucionado o si no es posible la desactivaríamos.
2) Aplicar un modo de depuración en las propias
reglas de mod_rewrite desde el .htaccess.
Puede realizarse con reglas como:
RewriteCond %{QUERY_STRING} !vardump
RewriteRule (.*) http://www.midominio.com/$1?vardump&request=%{THE_REQUEST}&reqhost=%{HTTP_HOST} [R=301,L,QSA]
Esto te permite mediante
FireBug o observando las cabeceras http visualizar que valores esta tomando la redirección. Es un método más laborioso, pero tiene la ventaja de poder usarse desde un simple .htaccess sin necesidad de permisos adicionales.