子文件夹中的BulletPHP REST API和NGINX

时间:2016-05-26 15:25:27

标签: php rest nginx

我正在尝试在子文件夹中使用NGINX设置BulletPHP。

  • BulletPHP位于domain.de/mi/sp/bullet/
  • 我的主要脚本位于domain.de/mi/sp/esa2/index.php
  • 并且可以在domain.de/mi/sp/esa2/api
  • 上访问REST API

当我拨打http://domain.de/mi/sp/esa2/api/时,我从BulletPHP获得“Not Found”。但为什么呢?

这是此路径的NGINX配置:

 location ~ ^/mi/sp/esa2/api {
     try_files $request_uri $request_uri/ /mi/sp/esa2/index.php$is_args?u=$args;
 }

这是index.php脚本:

<?php
require __DIR__ . '/../bullet/vendor/autoload.php';

$app = new Bullet\App();
// I also tried '/' here...
$app->path('/mi/sp/esa2/api/', function($request) {
    return "Hello World!";
});

echo $app->run(new Bullet\Request());

?>

1 个答案:

答案 0 :(得分:0)

我的配置存在一些问题。

您已选择使用正则表达式location作为本质上的前缀。它可能不会破坏任何东西,但正则表达式位置具有不同的执行顺序来为位置添加前缀,因此您应该知道。此外,前缀位置更有效。有关详细信息,请参阅this document

您使用在请求处理开始时设置一次的$request_uri,并且还包括查询字符串。通常从包含当前URI的try_files变量构造$uri URI(在内部转换之后)。有关详细信息,请参阅this document

您的默认操作是:

/mi/sp/esa2/index.php$is_args?u=$args

如果没有查询字符串,您将获得:

/mi/sp/esa2/index.php?u=

使用查询字符串(例如:xxx),您将获得:

    /mi/sp/esa2/index.php??u=xxx

因此,您应该删除$is_arg,因为它只是向URI添加第二个?。有关详细信息,请参阅this document

您可能希望将index.php文件替换为:

<?php phpinfo();

只是检查您是否将正确的参数传递给框架。