我在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阻止了该请求,也许是我所缺少的东西。
任何建议将不胜感激。