Nginx переписать конвертировать Querystring в путь
Мне бы понравилось это простое правило переписывания:
/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
(более простые правила работают просто отлично..)
Спасибо
2 ответа
Решение
Если вы хотите перенаправить
location ~ /somefolder/mypage.aspx {
if ($args ~* "^myid=(\d+)&tab=overview") {
set $mid $1;
set $args '';
rewrite ^.*$ /folder/$mid/overview permanent;
}
}
Не забудьте настроить /folder/$1/ обзор местоположения.
Короче и более правильный вариант ответа Валерия Викторовского.
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;