Nginx переписать конвертировать Querystring в путь


11

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

/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

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

Спасибо

Ответы:


12

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

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

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


Спасибо, редирект работает, но без параметра ($ 1) ... он пустой
YardenST

Я обновил ответ.
Валерий Викторовский

32

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

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;

жаль, что ты не опубликовал это раньше :) это сэкономило бы мне время
YardenST

лол. у тебя было много таких правил? ну, лучше поздно, чем никогда! Кроме того, я могу получить согласие, тогда? :)
CNST

Валерийное решение работает в
итоге

9
meta.stackexchange.com/questions/5234/… « Убедитесь, что помимо работы для вас ответ - это действительно хорошая практика. Иногда после того, как ответ принимается, приходит другой, раскрывая тот факт, что предыдущий действительно был плохим хакером. »Серьезно, с ответом Валерия есть не одна, а несколько разных проблем! Каждая строка по сути неверна, кроме фигурных скобок!
CNST
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.