Nginx 重写将查询字符串转换为路径

Nginx 重写将查询字符串转换为路径

我希望这个简单的重写规则:

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

重定向至:

/folder/4343/overview/

我寻找了一些解决方案,但实际上都没有效果。

我试过:

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

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

我做错了什么?我得到了 404

(更简单的规则就很好了..)

谢谢

答案1

如果你想重定向

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

不要忘记配置/folder/$1/overview 位置。

答案2

Valery Viktorovsky 回答的更简短、更正确的版本。

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

或者,嘿,如果您不需要验证参数,它甚至可以更短:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;

相关内容