Nginx reescrever converter Querystring para caminho

10

Eu gostaria dessa regra simples de reescrever:

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

para ser redirecionado para:

/folder/4343/overview/

Procurei algumas soluções e nenhuma delas funcionou de verdade.

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

    
por YardenST 16.03.2013 / 15:37

2 respostas

11

Se você quiser redirecionar

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

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

    
por 16.03.2013 / 16:21
27

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

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

Ou, hey, pode até ser mais curto, se você não precisa verificar os argumentos:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;
    
por 16.03.2013 / 20:11