• Nginx rewrite - как получить значение нескольких переменных?

    Tark
    @Tark
    Pyramid'альный мир
    Есть три варианта решения этой проблемы, два из них одинаково плохи, а третий универсален.

    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. Идеально.
    Ответ написан
    2 комментария
  • Nginx rewrite - как получить значение нескольких переменных?

    @ShamblerR
    1. (x)(y )никто не отменял $1$2 и тд тоже.
    2. SET тоже работает. в чем проблема ?

    if ($host ~* ^(www\.)(.+)) {
                    set $HBW $2;
                    root   /var/www/$HBW/web;

    Хотя все это очень странно обычно это делают на стороне php
    Опишите что вы хотите получить по итогу конкретную задачу, покане совсем понятно зачем так делать.
    Ответ написан
    1 комментарий