web-dev-qa-db-fra.com

Nginx réécrire pour une URL avec des paramètres

J'ai une URL de ce type:

http://www.example.com/?param1=val1&param2=&param3=val3&param4=val4&param5=val5

Et je veux la rediriger à celui-ci:

http://www.example.com/newparam/val3/val4

J'ai donc essayé cette règle de réécriture sans succès:

rewrite "/?param1=val1&param2=&param3=(.+)&param4=(.+)&param5=(.+)" http://www.example.com/newparam/$1/$2 redirect;

Nginx n'est-il pas capable de traiter des paramètres de requête?

Edit : Je ne veux pas réécrire toutes les pétitions. Je n'ai besoin que de réécrire cette URL, sans affecter les autres.

16
David Morales

Ok, grâce à l'aide initiale de RZAB, j'ai redéfini sa règle vers cette solution de travail:

location / {
    if ($args ~* "/?param1=val1&param2=&param3=[0-9]+&param4=.+&param5=[0-9]+") {
        rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4? last;
    }
}

Je viens d'ajouter une condition pour éviter la récursion infinie et une? à la fin de la règle pour se débarrasser des paramètres initiaux . Ça marche parfaitement :)

15
David Morales
 Emplacement =/{
 réécrire ^ http://www.example.com/newparam/$arg_param3/$arg_param4; [plus.
4
rzab