Nginx Rewrite Convertir Querystring a Path

11

Me gustaría esta simple regla de reescritura:

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

para ser redirigido a:

/folder/4343/overview/

Busqué algunas soluciones y ninguna realmente funcionó ...

Lo intenté:

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

y

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

¿Qué estoy haciendo mal? Me estoy poniendo 404

(las reglas más simples funcionan bien ...)

Gracias

YardenST
fuente

Respuestas:

12

Si quieres redirigir

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

No olvide configurar / folder / $ 1 / descripción general.

Valery Viktorovsky
fuente
Gracias, la redirección funciona, pero sin el paramater ($ 1) ... está en blanco
YardenST
Actualicé la respuesta.
Valery Viktorovsky
32

Una versión más corta y correcta de la respuesta 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;
}

O, oye, incluso puede ser más corto, si no necesitas verificar los argumentos:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;
cnst
fuente
desearía haberlo publicado antes :) me habría
ahorrado
jajaja ¿Tenías muchas reglas como esa? ¡Bueno, mejor tarde que nunca! Además, ¿puedo obtener una aceptación, entonces? :)
cnst
La solución de Valery funciona al final :) y podría haber una sola respuesta :)
YardenST
99
meta.stackexchange.com/questions/5234/… « Asegúrese de que, además de trabajar para usted, la respuesta sea una buena práctica. A veces, después de que se acepta la respuesta, entra otra, descubriendo el hecho de que la anterior fue un mal truco. »En serio, ¡no hay solo uno, sino varios problemas diferentes con la respuesta de Valery! ¡Cada línea está esencialmente equivocada, aparte de las llaves!
Cnst