Nginx rewrite — как получить значение нескольких переменных?
Есть три варианта решения этой проблемы, два из них одинаково плохи, а третий универсален.location / {
    rewrite ^(\d+)/(\d+)$ /index.php?a=$1&b=$2 last;
    .... 
    try_files $uri $uri/ /index.php?a=$uri;
}
Это плохо тем, что для КАЖДОГО запроса будет проверяться, не соответствует ли строка одному из заявленных регекспов. Для каждого запроса, включая стили, скрипты и статику. Насчёт last в рейврайте не уверен.location ~* /(\d+)/(\d+) {
    rewrite ^(\d+)/(\d+)$ /index.php?a=$1&b=$2 last;
}

location / {
    try_files $uri $uri/ /index.php?a=$uri;
}
Этот способ плох тем, что придётся повторять регексп в локейшне. Насчёт last в реврайте опять же не уверен.location / {
    try_files $uri $uri/ /index.php?a=$uri;
}
Самый уверсальный способ. Единая точка входа, роутингом рулит PHP. Идеально.
1. (x)(y )никто не отменял $1$2 и тд тоже.
2. SET тоже  работает. в чем проблема ?if ($host ~* ^(www\.)(.+)) {
                set $HBW $2;
                root   /var/www/$HBW/web;
Хотя все это очень странно обычно это делают на стороне php
Опишите что вы хотите получить по итогу конкретную задачу, покане совсем понятно зачем так делать.