nginx reescreve para uma url com parâmetros

14

Eu tenho um URL desse tipo:

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

E quero redirecioná-lo para este:

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

Então, tentei esta regra de reescrita sem sucesso:

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

O nginx não consegue lidar com parâmetros de consulta?

EDIT: Eu não quero reescrever todas as petições. Eu só preciso reescrever essa URL, sem afetar os outros.

    
por David Morales 15.07.2010 / 17:50

2 respostas

13

Ok, graças à ajuda inicial do rzab, redefini sua regra para essa solução de trabalho:

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

Acabei de adicionar uma condição para evitar a recursão infinita e uma? no final da regra para se livrar dos parâmetros iniciais . Funciona perfeitamente:)

    
por 16.07.2010 / 10:16
4
location = / {
  rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4;
}
    
por 15.07.2010 / 19:21