Nginx Rewrite Convert Querystring to Path

11

Je voudrais cette règle de réécriture simple:

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

être redirigé vers:

/folder/4343/overview/

J'ai cherché des solutions et aucune n'a vraiment fonctionné ..

J'ai essayé:

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

et

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

Qu'est-ce que je fais mal? Je reçois 404

(des règles plus simples fonctionnent très bien ..)

Merci

YardenST
la source

Réponses:

12

Si vous voulez rediriger

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

N'oubliez pas de configurer / dossier / $ 1 / emplacement de vue d'ensemble.

Valery Viktorovsky
la source
Merci, la redirection fonctionne, mais sans le paramètre (1 $) ... elle est vide
YardenST
J'ai mis à jour la réponse.
Valery Viktorovsky
32

Une version plus courte et plus correcte de la réponse 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, hé, cela peut même être plus court, si vous n'avez pas besoin de vérifier les arguments:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;
cnst
la source
j'aurais
lol. aviez-vous beaucoup de règles comme ça? Eh bien, mieux vaut tard que jamais! puis-je également obtenir une acceptation? :)
cnst
La solution Valery fonctionne bien :) et il ne peut y avoir qu'une seule réponse :)
YardenST
9
meta.stackexchange.com/questions/5234/… « Assurez-vous qu'en plus de travailler pour vous, la réponse est vraiment une bonne pratique. Parfois, une fois la réponse acceptée, une autre entre, découvrant que la précédente était en fait un mauvais hack. »Sérieusement, il n'y a pas qu'un, mais plusieurs problèmes différents avec la réponse de Valéry! Chaque ligne est essentiellement fausse, à part les accolades!
cnst