Как отобразить части nginx $request_uri в переменные

В этом вопросе я нашел, кто сопоставить первый каталог $ request_uri с переменной nginx.

Мне нужно сделать это с 2 каталогами и одним файлом: localhost:80/dir1/dir2/file.html сопоставить с localhost:80/$topdir/$secondir/$file

я делаю:

map $request_uri $topdir {
    ~(?<captured_topdir>[^\/]*[^\/]) $captured_topdir;
}
map $request_uri $secondir{
    ~([^\/]?<secondir>[^\/]) $secondir;
}
map $request_uri $endpart {
    ~([^\/]*[^\/]?<endpart>) $endpart;
}

но не повезло, когда я пробую это на nginx, только $ topdir работает правильно!

Спасибо!

1 ответ

Я, наконец, решаю это по-другому, без карты. Просто внутри локации я использовал

        if ($request_uri ~ "^(.*)/(.*)/(.*).*$" ) {
            set  $first  $1;
            set  $second $2;
            set  $third $3;
        }

Тогда теперь $first, $second и $third имеют каждую часть.

Другие вопросы по тегам