Задать вопрос

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. Картинки и др. отдаются нормально.
Сайт во второй директории при привязке его к отдельному домену работает полноценно.
  • Вопрос задан
  • 4336 просмотров
Подписаться 4 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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 Автор вопроса
Фактически они будут немного разные, но на данный момент в целях тестирования работоспособности они одинаковые.

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽