2016-05-26 29 views
0

我試圖在子文件夾中使用NGINX設置BulletPHP。子文件夾中的BulletPHP REST API和NGINX

  • BulletPHP是domain.de/mi/sp/bullet/
  • 我的主要腳本在domain.de/mi/sp/esa2/index.php
  • 和REST API應該accessable上domain.de/mi/sp/esa2/api

當我打電話http://domain.de/mi/sp/esa2/api/我從BulletPHP 「未找到」。但爲什麼?

這是這條道路的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

嗯,這只是一個猜測,因爲我不熟悉nginx,但你在PHP和URL中使用尾部'/',而在'location〜^/mi/sp中使用了非尾部斜槓/ esa2/api'(在api後面沒有斜槓'/')。這可能是問題嗎? –

回答

0

我有你的配置的幾個問題。

您選擇使用正則表達式location來表示本質上是一個前綴。它可能不會破壞任何東西,但正則表達式位置具有不同的執行順序以在位置前綴,所以您應該知道。此外,前綴位置更有效。詳情請見this document

您使用$request_uri,它在請求處理開始時設置一次,並且還包含查詢字符串。構造try_files來自$uri變量(包含當前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(); 

只是爲了檢查要傳遞正確的參數到你的框架。