Назад | Перейти на главную страницу

Nginx Rewrite преобразовать строку запроса в путь

Мне бы понравилось это простое правило перезаписи:

/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

(более простые правила работают нормально ..)

Спасибо

Более короткий и правильный вариант ответа Валерия Викторовского.

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;

Если вы хотите перенаправить

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

Не забудьте настроить / folder / $ 1 / overview расположение.