接受标头或URL中的nginx和API版本控制

接受标头或URL中的nginx和API版本控制,nginx,Nginx,所以我决定做两件错事,稍微受到启发 我希望我的API通过accept头接受版本规范,但也在URL中接受,例如/v1 现在,我已经做了一个nginx配置,它可以与Accept头一起工作,但是尝试了各种方法,我还没有得到/v1 我想要实现的是,传递给我的应用程序的URL不包括版本部分,因为版本的角色只是指向根目录 map $http_accept $api_version { default 0; "application/vnd.it.echo.api+json; version=

所以我决定做两件错事,稍微受到启发

我希望我的API通过accept头接受版本规范,但也在URL中接受,例如/v1

现在,我已经做了一个nginx配置,它可以与Accept头一起工作,但是尝试了各种方法,我还没有得到/v1

我想要实现的是,传递给我的应用程序的URL不包括版本部分,因为版本的角色只是指向根目录

map $http_accept $api_version {
    default 0;
    "application/vnd.it.echo.api+json; version=1" "v1";
}

server {
    listen 80;
    server_name api.app;

    index index.html index.htm index.php;

    charset utf-8;

    sendfile off;

rewrite_log on;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    location / {
        if ($api_version = 0) {
            return 307 https://echo.it;
        }
        try_files $uri $uri/ @api;
    }

    location /v1 {
        set $api_version "v1";
        rewrite ^/.+/(.+)$ /$1 last;
    }

    location @api {
        root       /home/vagrant/api/$api_version/public/;
        error_log  /var/log/nginx/api.$api_version.app-error.log error;
        try_files  $uri $uri/ /index.php?$query_string;
    }

    error_page 404 /index.php;

    location ~ \.php$ {
        root /home/vagrant/api/$api_version/public/;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}
问题似乎在于/v1 location指令中的重写规则未生效