Nginx Переписати Перетворити рядок запитів у шлях


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;
    }
}

Не забудьте налаштувати / папку / $ 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

Рішення Валерія працює внизу :), і відповідь могла бути лише одна :)
YardenST

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