14

I whould like this simple rewrite rule:

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

to be redirected to:

/folder/4343/overview/

I looked for some solutions and none actually worked..

I tried:

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

and

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

What am I doing wrong? I'm getting 404

(simpler rules works just fine..)

Thanks

lulalala
  • 1,797
YardenST
  • 275

2 Answers2

38

A shorter and more correct version of Valery Viktorovsky answer.

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

Or, hey, it can even be shorter, if you don't need to be verifying the arguments:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;
cnst
  • 14,646
13

If you want redirect

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

Don't forget to configure /folder/$1/overview location.