redirect nginx parameters url-rewriting

redirect - nginx: reescribe MUCHO(2000+) de URL con parámetros



parameters url-rewriting (1)

Tengo que migrar muchas URL con parámetros, que se ven así:

/somepath/somearticle.html?p1=v1&p2=v2 --> /some-other-path-a

y también la misma URL sin parámetros:

/somepath/somearticle.html --> /some-other-path-b

La parte difícil es que las dos URL de destino son páginas totalmente diferentes en el nuevo sistema, mientras que en el sistema anterior los parámetros solo indicaban qué pestaña abrir por defecto.

Intenté diferentes reglas de reescritura, pero llegué a la conclusión de que los parámetros no son considerados por nginx rewrites. Encontré una manera de usar las directivas de ubicación, pero tener más de 2000 directivas de ubicación simplemente se siente mal.

¿Alguien sabe de una manera elegante cómo hacer esto? Vale la pena señalar que, además de esas redirecciones de 2000+, tengo otras 200,000 (!) Redirecciones. Ya funcionan, porque son bastante simples. Entonces, lo que quiero enfatizar es que el rendimiento debe ser clave.


No puede hacer coincidir la cadena de consulta (desde el ? Hacia adelante) en la location y rewrite expresiones, ya que no es parte del URI normalizado. Vea este documento para más detalles.

El URI completo está disponible en el parámetro $request_uri . Usar $request_uri puede ser problemático si los parámetros no se envían en un orden consistente.

Para procesar muchos URI, use una directiva de map , por ejemplo:

map $request_uri $redirect { default 0; /somepath/somearticle.html?p1=v1&p2=v2 /some-other-path-a; /somepath/somearticle.html /some-other-path-b; } server { ... if ($redirect) { return 301 $redirect; } ... }

También puede usar expresiones regulares en el map , por ejemplo, si los URI también contienen parámetros opcionales no coincidentes. Vea este documento para más información.