Php 针对RESTful API的nginx配置

Php 针对RESTful API的nginx配置,php,nginx,Php,Nginx,我是nginx和php的初学者,请原谅我的基本问题 对于基于RESTful的API(nginx+php),我需要一些nginx配置方面的帮助 以下是nginx配置的相关片段(如建议的),用于将所有/api/v1/*请求重定向到我的apiv1.php脚本: server { server_name myServer; root /usr/share/nginx/html; location /api/v1/ { try_f

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

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

以下是nginx配置的相关片段(如建议的),用于将所有/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;
    }
现在的问题是,当我在浏览器中键入时,apiv1.php脚本似乎没有收到“resource/GetInfo”。实际上,GET和REQUEST都是空的,但是服务器看起来还可以

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

request_order = "GP"
variables_order = "GPCS"
register_argc_argv = Off
auto_globals_jit = On.
你知道为什么php的GET和请求是空的吗?这仅仅与我的php配置有关吗

致以最良好的祝愿, M.

替换此:

location /api/v1/ {
    try_files $uri $uri/ /apiv1.php?$args;
}
在服务器块中包含以下内容:

rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=$1&method=$2? last;
创建一个名为apiv1.php的php文件,并使用以下代码行将其放置在web服务器的根目录中:

<?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;

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

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

在这里,我不受类/方法结构的限制,位置似乎比重写更具可读性。

仅包含GET参数(即查询字符串)。因此,在您的示例中,您可能会在try_files指令中将查询字符串(如果有)附加到回退uri。谢谢,看起来我错过了这一个。太好了,现在我的_GET和_请求不再是空的:)嗯,我向前迈进了一步,因为您帮助了我,所以非常感谢!)这是一个很好的答案——我最初得到了常见的文件未找到错误PHP。然后我运行了:tail/var/log/nginx/error.log和“无法打开主脚本:/var/www/[myDomain]/html/apiv1.php——因此将index.php重命名为apiv1.php,它就成功了。这应该是公认的答案。干得好。简洁、完整、有用。
location ~ ^/api/v0/(.*)/?$ {
    try_files $uri $uri/ /v0.php?req=$1&$args;
}