Nous avons une application IIS existante qui fonctionnait avec Helicon APE pour réécrire les urls en utilisant les règles Apache existantes. Voici un exemple :
RewriteRule ^/webapp/([^/]*)/([^/]*)(/.+)? /webapp/$4?$2=$3 [NC,L,P,QSA]
Pour ces règles, une url originale comme /webapp/f6/3/gx/1/default.htm
se transforme en /default.htm?f6=3&gx=1
. Ceci supporte un nombre variable de chemins intermédiaires dans APE (apparemment dans Apache aussi).
Comme APE n'est pas très évolutif et se bloque sous la charge, j'ai commencé à mettre en place un NGINX qui se chargera des réécritures et de l'équilibrage des charges pour les serveurs IIS à l'arrière.
J'ai cependant constaté un problème : la même règle pour les réécritures nginx ne fonctionne pas de la même manière ; j'ai dû la transformer pour qu'elle corresponde :
rewrite ^/webapp/(.*)/([^/]+).htm /webapp/$2?$1;
qui, en fait, pour /webapp/f6/3/gx/1/default.htm
renvoie à /webapp/default.htm?f6/3/gx/1
.
J'ai essayé de trouver un moyen de faire en sorte que nginx convertisse les éléments du chemin d'accès. /x/y/g/z
en paires de chaînes de requête ?x=y&g=z
. Apache semble le faire automatiquement, alors que nginx ne le fait pas, et je ne trouve rien dans la documentation ou dans d'autres questions sur ce site ou sur StackOverflow.
Apparemment, il est possible de le faire en utilisant map, mais je ne trouve pas d'utilisation spécifique et je ne suis pas un expert de nginx pour le faire. Toute aide ou indication sera la bienvenue.