Nginx: разный root в зависимости от cookies, частично работает, проблема с PHP — как исправить?

Есть такой код, в обоих директориях (root1 и root2) одинаковые копии сайта (Yii)
server {

        root /root1;

        index  index.html index.htm index.php;

        server_name domain.ru;

        location / {
                if ($cookie_VAR = "1") {
                        root /root2;
                }

                try_files $uri $uri/ /index.php?$args;
        }

        #error_page 500 502 503 504 /50x.html;

        location ~ \.php$ {
                if ($cookie_VAR = "1") {
                    root /root2;
                }

                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000;

                fastcgi_index index.php;
                include fastcgi_params;

                fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;

        }
}


При установленной cookie работает только главная страница второго сайта, остальное не работает.

На сайтах настроено ЧПУ, в случае отсутствия cookies все работает корректно, и запросы типа http://domain.ru/какой_то_путь уходят на index.php.
При наличии cookie все кроме domain.ru отдает 404. Картинки и др. отдаются нормально.
Сайт во второй директории при привязке его к отдельному домену работает полноценно.
  • Вопрос задан
  • 4327 просмотров
Решения вопроса 2
@Nc_Soft
В общем, рут можно задать только один раз. Попробуйте как-то так, я проверил, вроде работает.
server {
        index  index.html index.htm index.php;

        server_name test.loc;
        
        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        #error_page 500 502 503 504 /50x.html;

        location ~ \.php$ {
            if ($cookie_VAR = "1") {
                root /Users/evgenij/projects/www/1;
            }
        
            if ($cookie_VAR = "2") {
                root /Users/evgenij/projects/www/2;
            }

            root /Users/evgenij/projects/www/3;
            
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass 127.0.0.1:9000;

            fastcgi_index index.php;
            include fastcgi_params;

            fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
        }
}

Тестил так
curl --cookie "VAR=1" http://test.loc
curl --cookie "VAR=2" http://test.loc
curl http://test.loc
Ответ написан
@kashtanoff Автор вопроса
Решил вопрос так:
set $newroot "/root1";

if ($cookie_VAR = "1") {
        set $newroot "/root2";
}

root $newroot;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Nc_Soft
Зачем нужно 2 одинаковых приложения в зависимости от куки запускать?
Ответ написан
Комментировать
@kashtanoff Автор вопроса
Фактически они будут немного разные, но на данный момент в целях тестирования работоспособности они одинаковые.

Необходимо убедиться что все работает идентично.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы