Я начинаю с nginx и php, поэтому, пожалуйста, извините мой основной вопрос.
Для API на основе RESTful (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; }
Теперь проблема заключается в том, что когда я набираю 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?
С наилучшими пожеланиями, М.
Замените это:
location /api/v1/ { try_files $uri $uri/ /apiv1.php?$args; }
Внутри блока сервера:
rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=$1&method=$2? last;
Создайте php-файл с именем apiv1.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;
Проверьте, посетив следующую ссылку в своем браузере:
http://myServer/api/v1/members/getInfo
Если кто-то другой попал на эту страницу, есть решение, которое я получил для себя после небольшого исследования:
location ~ ^/api/v0/(.*)/?$ { try_files $uri $uri/ /v0.php?req=$1&$args; }
Здесь я не ограничен структурой класса и метода, и расположение кажется более читаемым, чем переписывание.