Nginx Rewrite Convert Querystring to Path

11

Chciałbym, aby ta prosta reguła przepisywania:

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

zostać przekierowanym do:

/folder/4343/overview/

Szukałem niektórych rozwiązań i żadne z nich faktycznie nie działało ...

Próbowałem:

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

i

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

Co ja robię źle? Dostaję 404

(prostsze reguły działają dobrze ..)

Dzięki

YardenST
źródło

Odpowiedzi:

12

Jeśli chcesz przekierować

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

Nie zapomnij skonfigurować lokalizacji / folder / $ 1 / Overview.

Valery Viktorovsky
źródło
Dzięki, przekierowanie działa, ale bez parametru (1 $) ... jest puste
YardenST
Zaktualizowałem odpowiedź.
Valery Viktorovsky
32

Krótsza i bardziej poprawna wersja odpowiedzi Walerego Wiktorowskiego.

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

Lub, hej, może być nawet krótszy, jeśli nie musisz weryfikować argumentów:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;
cnst
źródło
szkoda, że ​​nie opublikowałeś go wcześniej :) zaoszczędziłoby mi to trochę czasu
YardenST
lol. czy miałeś wiele takich zasad? cóż, lepiej późno niż wcale! też, czy mogę otrzymać akceptację? :)
cnst
Rozwiązanie Valery działa na pierwszym miejscu :) i może być tylko jedna odpowiedź :)
YardenST
9
meta.stackexchange.com/questions/5234/… « Upewnij się, że oprócz pracy dla Ciebie, odpowiedź jest naprawdę dobrą praktyką. Czasami po zaakceptowaniu odpowiedzi pojawia się kolejna, odsłaniając fakt, że poprzedni był w rzeczywistości złym hackem. »Poważnie, nie ma tylko jednego, ale kilka różnych problemów z odpowiedzią Valery'ego! Każda linia jest zasadniczo błędna, z wyjątkiem nawiasów klamrowych!
cnst