使用nginx的每个路由都有NotFoundHttpException

时间:2016-05-26 16:56:52

标签: php laravel ubuntu nginx

我尝试配置nginx以动态处理所有/ {{app}} /查询请求,如下所示:

server {
    listen       80;
    server_name  localhost;
    root   /usr/share/nginx/apps;

    location / {
        index index.php;
        try_files $uri @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^/([^/]+)(.*)$ /$1/public/index.php?$2 last;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

目前,nginx将我的请求路由到正确的目录和文件。例如:

www.domain.com/test/item/1/edit

...路线到:

/path/to/my/apps/test/public/index.php?/item/1/edit

我也能够回显var_export($ _ GET)并查看该查询:

array(
    '/item/1/edit' => '',
)

但是Laravel总是说:

NotFoundHttpException in RouteCollection.php line 161:
in RouteCollection.php line 161
at RouteCollection->match(object(Request)) in Router.php line 823
at Router->findRoute(object(Request)) in Router.php line 691
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 57

但为什么?

路线如下:

Route::get('/', function () {
    return view('welcome');
});

Route::get('/item', function() {
    return 'Item';
});

php artisan route:list返回:

+--------+----------+---------+------+---------+------------+
| Domain | Method   | URI     | Name | Action  | Middleware |
+--------+----------+---------+------+---------+------------+
|        | GET|HEAD | /       |      | Closure | web        |
|        | GET|HEAD | item    |      | Closure | web        |
+--------+----------+---------+------+---------+------------+

我的Laravel版本是5.2.33 我使用Ubuntu 16.04 Server和PHP 7.0.6(PHP-FPM)作为主机。

这是一个nginx配置问题吗? 还是一个Laravel问题? 或者它是Linux,也许是权限相关的主题?

2 个答案:

答案 0 :(得分:1)

将应用程序根目标指向公共文件夹,它将起作用

答案 1 :(得分:0)

经过一番研究和尝试后,我找到了以下解决方案:

db.collection.aggregate([
    { "$match": { "jobs.result": "failure" } }, 
    { "$unwind": "$jobs" }, 
    { "$group": { 
        "_id": "$_id", 
        "job": { "$last": "$jobs" }, 
        "definition": { "$first": "$definition" } 
    }}, 
    { "$redact": { 
        "$cond": [ 
            { "$eq": [ "$job.result", "failure" ] }, 
            "$$KEEP", 
            "$$PRUNE" 
        ] 
    }}, 
    // optional stage
    { "$project": { 
        "definition": 1, 
        "result": "$job.result" 
    }} 
])