Laravel将路由重定向到API

时间:2018-11-22 03:04:34

标签: laravel-routing php-7.1 laravel-5.7 laravel-request laravel-resource

我在Laravel 5.7的 routes / web.php 文件中具有以下路由。

Route::match(['get', 'post', 'put', 'delete'], '{request}', function ($request) {
    return redirect('api/'.$request);
})->where('request', '^(?!api).*');

此路由规则将检查所有以“ api”开头的路由,将“ api”添加到该路由之前并将其重定向。

这对于GET请求非常有效,但不适用于POST,PUT或DELETE请求。尝试发布内容时收到HttpException。如果我在 routes / web.php 文件中定义了单独的POST,PUT或DELETE路由,则会得到相同的结果。该请求似乎立即失败,因此该路由从不执行或在执行期间失败。

Route::post('some/feature/{feature_id}/{sub_feature_id}', 'API/SomeFeature@store');

这是我得到的例外。

{
    "exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException",
    /* ... */
}

我们有一个使用以下路由结构的旧系统。 feature/{feature_id}/{sub_feature_id}

我正在使用的新系统具有以下路由结构。 api/v1/feature/{feature_id}/sub_feature/{sub_feature_id}

我需要做的是将所有不是以api开头的请求都重定向到新系统中的相应请求。

如果我在 routes / api.php 路由文件中定义了旧系统的路由,则它们会自动以“ api”作为前缀,这不是我想要的行为,因为我们的旧系统没有以“ api”为前缀。

有什么办法可以使它适用于POST,PUT和DELETE请求?

我最好的猜测是,这些动词在 routes / web.php 中针对基于API的请求被禁用,并且仅当由同一域中的表单提交时才执行。或者,可能是CSRF阻止了该请求,也许是我所缺少的东西。

任何建议将不胜感激。

0 个答案:

没有答案