Nginx Rewrite Convert Querystring to Path

11

Gostaria dessa regra de reescrita simples:

/somefolder/mypage.aspx?myid=4343&tab=overview

para ser redirecionado para:

/folder/4343/overview/

Procurei algumas soluções e nenhuma funcionou ..

Eu tentei:

rewrite ^/somefolder/mypage.aspx?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

e

rewrite ^/somefolder/mypage\.aspx\?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

O que estou fazendo de errado? Estou recebendo 404

(regras mais simples funcionam muito bem ..)

obrigado

YardenST
fonte

Respostas:

12

Se você deseja redirecionar

location ~ /somefolder/mypage.aspx {
    if ($args ~* "^myid=(\d+)&tab=overview") {
        set $mid $1;
        set $args '';
        rewrite ^.*$ /folder/$mid/overview permanent;
    }
}

Não esqueça de configurar o local / folder / $ 1 / overview.

Valery Viktorovsky
fonte
Obrigado, as obras de redirecionamento, mas sem a paramater (US $ 1) ... é em branco
YardenST
Eu atualizei a resposta.
Valery Viktorovsky,
32

Uma versão mais curta e correta da resposta de Valery Viktorovsky.

location = /somefolder/mypage.aspx {
    if ($arg_tab != overview) { return 404; }
    if ($arg_myid !~ "^\d+$") { return 404; }
    rewrite ^ /folder/$arg_myid/overview? permanent;
}

Ou, ei, pode ser ainda mais curto, se você não precisar verificar os argumentos:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;
cnst
fonte
desejo você tinha postado mais cedo :) Teria me salvar algum tempo
YardenST
ri muito. você tinha muitas regras assim? Bem, melhor tarde do que nunca! Além disso, posso receber uma aceitação, então? :)
cnst
Solução Valery funciona linha de fundo :) e poderia haver apenas uma resposta :)
YardenST
9
meta.stackexchange.com/questions/5234/… « Certifique-se de que, além de trabalhar para você, a resposta é realmente uma boa prática. Às vezes, depois que a resposta é aceita, outro entra, descobrindo o fato de que a anterior era de fato um mau hack. Sério, não há apenas um, mas vários problemas diferentes com a resposta de Valery! Toda linha está essencialmente errada, exceto as chaves!
CNST