I am a beginner with nginx and php, so please excuse my basic question.
For a RESTful based API (nginx + php) I would need some help with nginx configuration.
Here is the relevant snippet of the nginx configuration (as suggested here ) for redirecting all /api/v1/* requests to my apiv1.php script:
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;
}
Now the issue is that when I type http://myServer//api/v1/resource/GetInfo in my browser, the apiv1.php script doesn't seem to receive the "resource/GetInfo". Actually, _GET and _REQUEST are empty, but _SERVER looks OK!
In my /etc/php5/fpm/php.ini, the following relevant config is enabled:
request_order = "GP"
variables_order = "GPCS"
register_argc_argv = Off
auto_globals_jit = On.
Do you maybe know why the php _GET and _REQUEST are empty? Is this related to my php configuration only?
Best regards, M.
Replace this:
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}
With the following inside your server block:
rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=$1&method=$2? last;
Create a php file called apiv1.php and place in the root directory of your web server with the following lines of code:
<?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;
Test by visiting the following link in your browser:
http://myServer/api/v1/members/getInfo
If someone else hit this page, there is solution I got for myself after a bit research:
location ~ ^/api/v0/(.*)/?$ {
try_files $uri $uri/ /v0.php?req=$1&$args;
}
Here I'm not limited with class/method structure and location seems more readable than rewrite.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.