如何配置 Laravel 路由器一些路由规则在不同的路径上工作?

How to config Laravel Router some route rule work on different path?

我在 A.com 上部署了我的 Laravel 5 项目,我也想把它放在 B.com/a 下。由于某种原因,我应该在路由器中处理 /a 路径。

所以在路由器中我写: Route::get('post','PostController@index'); Route::get('a/post','PostController@index'); 这不是一个好方法,因为有冗余,特别是有很多其他路由规则。

在文档中,只有{xx}?来处理可选参数,但在我的项目中,它不是参数而是静态字符串。

有没有更好的方法来合并两条线?

你可以这样做:

RealRoutes.php:

Route::get('post','PostController@index');
// ... include all of your other routes here

routes.php:

include('RealRoutes.php');
Route::group(['prefix' => 'a/'], function () {
    include('RealRoutes.php');
});

使用 lambda 函数或类似函数可能有更好的方法来解决此问题,但上述方法应该可以作为快速解决方案。

我会在 foreach 循环中使用路由前缀。这将使您能够快速轻松地管理路由上的前缀,同时将它们全部保存在一个地方。

foreach([null, 'a'] as $prefix) {
    Route::group(['prefix' => $prefix], function () {
        // Your routes here
    });
}

没有前缀的路由将优先,因为在这种情况下它们的路由将首先生成。如有必要,您可以轻松地交换数组。

如果您真的想在单个路由定义中执行此操作,您可以使用正则表达式来匹配路由。

Route::get('{route}', function () {
    dd('Browsing ' . app('request')->path());

})->where('route', '(a/)?post');

但它显然不是很 clean/readable 所以可能不推荐。