@MarkLb

Как сконфигурировать редирект на еще одну часть advanced-приложения Yii2 в nginx?

Здравствуйте. Есть Advanced-приложение Yii2, которое имеет: backend, frontend, api.
Под backend, frontend получилось составить редиректы, но вот под API что-то не выходит.
API идет по ссылке: site.zone/api/web, хотелось бы добиться ссылки вида site.zone/api

Рабочие конфигурации для frontend/backend:
location / {
            root $base_root/frontend/web;
            try_files $uri $uri/ /frontend/web/index.php$is_args$args;
 
            location ~ ^/assets/.+\.php(/|$) {
                deny all;
            }
        }
 
    location /admin {
        alias $base_root/backend/web;
        try_files  $uri /backend/web/index.php?$args;
 
        location = /admin/ {
           return  301 /admin;
        }
 
        location ~* ^/admin/(.+\.php)$ {
            try_files  $uri /backend/web/$1?$args;
        }
 
    }
 
        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }
        rewrite (?!^/((frontend|backend)/web|admin))^ /frontend/web$uri break;
        rewrite (?!^/backend/web)^/admin(/.+)$ /backend/web$1 break;
 
            fastcgi_pass    127.0.0.1:9001;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
 
        location ~ /\. {
            deny all;
        }


Вот пробовал такой вариант для API, но идет краш: "Access denied" по всему приложению(добавлены (32-35 строка, 44 строка к предыдущему конфигу):
location / {
            root $base_root/frontend/web;
            try_files $uri $uri/ /frontend/web/index.php$is_args$args;
 
            location ~ ^/assets/.+\.php(/|$) {
                deny all;
            }
        }
 
    location /admin {
        alias $base_root/backend/web;
        try_files  $uri /backend/web/index.php?$args;
 
        location = /admin/ {
           return  301 /admin;
        }
 
        location ~* ^/admin/(.+\.php)$ {
            try_files  $uri /backend/web/$1?$args;
        }
 
    }
 
        location /api {
            alias $base_root/api/web;
            try_files  $uri /api/web/index.php?$args;
 
            location = /api/ {
               return  301 /api;
            }
 
            location ~* ^/api/(.+\.php)$ {
                try_files  $uri /api/web/$1?$args;
            }
        }
 
        location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }
        rewrite (?!^/((frontend|backend)/web|admin))^ /frontend/web$uri break;
        rewrite (?!^/backend/web)^/admin(/.+)$ /backend/web$1 break;
        rewrite (?!^/api) /api/web$1 break;
 
            fastcgi_pass    127.0.0.1:9001;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
        }
 
        location ~ /\. {
            deny all;
        }
  • Вопрос задан
  • 478 просмотров
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Возможно у Вас проблема в правиле.
Пример из .htaccess, но может он натолкнёт Вас на правильное решение
^api(/.*)?$ api/web/$1 [L]
Соответственно Вам надо будет ещё изменить пути к файлам конфигурации и vendor в api/web/index.php
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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