我正在尝试在nginx + php7.1上安装luracast restler,但我总是得到以下输出。 (在带有apache + php 7.1的localhost上一切正常)
{
"error": {
"code": 404,
"message": "Not Found"
},
"debug": {
"source": "Routes.php:431 at route stage",
"stages": {
"success": [
"get"
],
"failure": [
"route",
"negotiate",
"message"
]
}
}
}
当我尝试resources.json时,我得到了这个:
{
"apiVersion": "1",
"swaggerVersion": "1.1",
"basePath": "https://api.example.com/api",
"produces": [
"application/json"
],
"consumes": [
"application/json"
],
"apis": []
}
NGINX.conf:
server {
listen *:443 ssl http2;
server_name api.example.com;
keepalive_timeout 70;
root /var/www/public;
# Security
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
fastcgi_param HTTPS on;
location /api/ {
try_files $uri $uri/ /api/index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf;
}
location ~ \.(aspx|jsp|cgi)$ {
return 410;
}
location ~ /\.ht {
deny all;
}
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
}
的index.php:
<?php
require_once 'vendor/restler.php';
use Luracast\Restler\Restler;
use Luracast\Restler\Defaults;
Luracast\Restler\Resources::$hideProtected = false;
Defaults::$crossOriginResourceSharing = true;
Defaults::$accessControlAllowOrigin = '*';
Defaults::$accessControlAllowMethods = 'GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD';
$r = new Restler();
$r->addAPIClass('Resources');
$r->addAPIClass('Explorer');
$r->addAPIClass('Controller\User');
$r->addAPIClass('Controller\Place');
$r->addAPIClass('Controller\Event');
$r->addAPIClass('Controller\Post');
$r->addAPIClass('Controller\Login');
$r->addAPIClass('Controller\Register');
$r->addAuthenticationClass('Controller\AccessControl');
$r->handle();
在带有apache的localhost上,一切正常,我得到以下输出:
{
"apiVersion": "1",
"swaggerVersion": "1.1",
"basePath": "http://localhost/api",
"produces": [
"application/json"
],
"consumes": [
"application/json"
],
"apis": [
{
"path": "/resources/user.{format}",
"description": "Class User"
},
{
"path": "/resources/place.{format}",
"description": "Class Place"
},
{
"path": "/resources/event.{format}",
"description": "Class Event"
},
{
"path": "/resources/post.{format}",
"description": "Class Post"
},
{
"path": "/resources/login.{format}",
"description": "Class Login"
},
{
"path": "/resources/register.{format}",
"description": "Class Register"
}
]
}
我还尝试过composer update来更新生成的自动加载路由。但是不起作用。有人有答案吗?
祝你好运
答案 0 :(得分:0)
Restler工作正常,这就是你获得JSON输出的原因:)
但你的课程似乎没有加载。
尝试手动包含它们,看看它是否解决了问题!
然后你可以尝试/user/{id}
并查看它是否有效!