我是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;
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当我在浏览器中输入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.
Run Code Online (Sandbox Code Playgroud)
你可能知道为什么php _GET和_REQUEST是空的吗?这只与我的php配置有关吗?
最好的问候,M.
Phe*_*yne 14
替换这个:
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}
Run Code Online (Sandbox Code Playgroud)
在服务器块中包含以下内容:
rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=$1&method=$2? last;
Run Code Online (Sandbox Code Playgroud)
创建一个名为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;
Run Code Online (Sandbox Code Playgroud)
通过访问浏览器中的以下链接进行测试:
http://myServer/api/v1/members/getInfo
Run Code Online (Sandbox Code Playgroud)
小智 5
如果其他人点击此页面,经过一番研究后我为自己找到了解决方案:
location ~ ^/api/v0/(.*)/?$ {
try_files $uri $uri/ /v0.php?req=$1&$args;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我不受类/方法结构的限制,并且位置似乎比重写更具可读性。
| 归档时间: |
|
| 查看次数: |
15181 次 |
| 最近记录: |