Подкаталог nginx Переписывает для MVC

Для меня определяют задачу с администрированием веб-приложения, которое имеет базовый каталог с набором унаследованного кода в нем, и подкаталог моего собственного создания с MVC основывал API, который мы используем для медленной миграции фронтэнда в модель SPA. Владелец получил дикого зайца его задница и постановил, чтобы мы переместились в nginx.

У меня есть обширный опыт в Apache, переписывает, и мне потребовались бы приблизительно девять секунд для установки этого в Apache. Однако, поскольку люди быстры для указания, nginx не является Apache. В то время как я могу получить любой раздел рвения самостоятельно в nginx, я не могу заставить API играть по правилам с главным приложением, когда это находится в своем/api/каталоге.

Я предполагаю, что это будет некоторая перестановка директивы местоположения, которая, кажется, ведет себя так же к в Apache. В основном, если что-нибудь поражает/api/каталог, я должен передать остаток от uri к/api/public/index.php с переписыванием:

^/(.*)$ public/index.php?_url=/$1;

Любая справка значительно ценится.

Существующая конфигурация:

 server {
            listen          10.1.1.225:443 ssl;
            server_name dev.domain.com;
            ssl_certificate /etc/nginx/conf.d/chain.crt;
            ssl_certificate_key /etc/nginx/conf.d/4096_SSL.key;
            set $root_path '/usr/share/nginx/www';
            root $root_path/trunk;
            index index.php index.html;
            fastcgi_param ENV development;
            fastcgi_buffers 8 16k;
            fastcgi_buffer_size 32k;
            fastcgi_read_timeout 180;
            location / {
                    try_files $uri $uri/ =404;
            }

            location ^~ /api {
                    rewrite ^/(.*)$ public/index.php?_url=/$1;
            }

            fastcgi_intercept_errors off;

            location ~ \.php {
                    fastcgi_pass   unix:/var/run/php-fpm.sock;
                    fastcgi_split_path_info ^(.+\.php)(.*)$;
                    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                    include        fastcgi_params;
            }
    }

Эта конфигурация ужасна, потому что я играл со всем этим день, но это должно понять через.

0
задан 2 September 2014 в 21:34
2 ответа

Вы правы, что nginx не apache, а это значит, что большинство мест, где вы можете подумать об использовании переписывания, неуместны. Вместо этого вам следует попробовать использовать try_files. Например:

location /api/ {
    try_files $uri /api/public/index.php?_url=$request_uri;
}
1
ответ дан 4 December 2019 в 17:11

Для других, ищущих эту замену:

location ^~ /api {
                    rewrite ^/(.*)$ public/index.php?_url=/$1;
            }

на

rewrite ^/api(/.*)$ /api/public/index.php?_url=$1 last;
0
ответ дан 4 December 2019 в 17:11

Теги

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