RESTful API 的 nginx 配置

nginx configuration for a RESTful API

我是nginx和php的初学者,所以请原谅我的基本问题。

对于基于 RESTful 的 API (nginx + php),我需要一些有关 nginx 配置的帮助。

这里是 nginx 配置的相关片段(建议 here),用于将所有 /api/v1/* 请求重定向到我的 apiv1.php 脚本:

    server {
        server_name myServer;
        root /usr/share/nginx/html;
        location /api/v1/ {
          try_files $uri $uri/ /apiv1.php?$args;
        }

        location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

现在的问题是,当我在浏览器中键入 http://myServer//api/v1/resource/GetInfo 时,apiv1.php 脚本似乎没有收到 "resource/GetInfo"。实际上,_GET 和_REQUEST 是空的,但是_SERVER 看起来没问题!

在我的/etc/php5/fpm/php.ini中,启用了以下相关配置:

request_order = "GP"
variables_order = "GPCS"
register_argc_argv = Off
auto_globals_jit = On.

您是否知道为什么 php _GET 和 _REQUEST 为空?这仅与我的 php 配置有关吗?

此致, M.

替换为:

location /api/v1/ {
    try_files $uri $uri/ /apiv1.php?$args;
}

在您的服务器块中包含以下内容:

rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=&method=? last;

使用以下代码行创建一个名为 apiv1.php 的 php 文件并将其放置在您的网络服务器的根目录中:

<?php
$class  = filter_input(INPUT_GET, 'class',  FILTER_SANITIZE_STRING);
$method = filter_input(INPUT_GET, 'method', FILTER_SANITIZE_STRING);

echo $class;
echo '<br />';
echo $method;

通过在浏览器中访问以下 link 进行测试:

http://myServer/api/v1/members/getInfo

如果其他人点击此页面,我经过一番研究后为自己找到了解决方案:

location ~ ^/api/v0/(.*)/?$ {
    try_files $uri $uri/ /v0.php?req=&$args;
}

这里我不受限于 class/method 结构和位置似乎比重写更具可读性。