小编Car*_*nes的帖子

nginx map接受头到api奇怪行为的子目录

我已经花了很长时间来解决这个问题,而且我无法理解nginx + hhvm如何映射我的请求.

基本上,我在api.example.com上有一个API,我想用Accept:application/vnd.com.example.api.v1 + json调用版本1和application/vnd.com.example.api.v2 + json for version 2. API本身是一个PHP应用程序,我将使用全新安装的HHVM运行.所有请求都将由index.php处理.

文件夹结构如下所示:

api.example.com/
  index.php (content: fail)
  v1/
    index.php (content: v1)
  v2/
    index.php (content: v2)
Run Code Online (Sandbox Code Playgroud)

每当我使用我的REST客户端访问带有v1接受标头的api.example.com/test时,我都会收到v1响应.当我使用v2的accept标头时,它会显示v2.所以一切都是正确的.如果我不提供任何接受标题,我会被重定向到example.com

NGINX配置如下所示

map $http_accept $api_version {
        default 0;
        "application/vnd.com.example.api.v1+json" 1;
        "application/vnd.com.example.api.v2+json" 2;
}

server {
        # listen to :80 is already implied.

        # root directory
        root /var/www/api.example.com/;
        index index.html;

        server_name api.example.com;
        include hhvm.conf;

        location / {
                if ($api_version = 0) {
                        # redirect to example.com if applicable
                        # Accept-header is missing
                        return 307 http://example.com;
                } …
Run Code Online (Sandbox Code Playgroud)

php api http nginx hhvm

9
推荐指数
1
解决办法
930
查看次数

标签 统计

api ×1

hhvm ×1

http ×1

nginx ×1

php ×1