我正在尝试在子文件夹中使用NGINX设置BulletPHP。
domain.de/mi/sp/bullet/
domain.de/mi/sp/esa2/index.php
domain.de/mi/sp/esa2/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());
?>
答案 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();
只是检查您是否将正确的参数传递给框架。