首页 > 解决方案 > 如果我有与任何请求匹配的“任何”路线,如何排除“/ nova”路线

问题描述

我将基于 laravel nova 制作自己的 CMS。现在我正在制作一个“页面”功能。我会将我的页面作为pages包含该url列的表的行。在我的routes/web.php文件末尾,我有与任何路线匹配的路线:

Route::get( .... );
Route::post( .... );
Route::get('/{page}', 'PageController@myRouter')->where('page', '[A-Za-z0-9_\-\/]+');

在该myRoute方法中,我将捕获一个 url 并尝试在数据库中找到具有此 url 的页面;一切正常,但是当我输入<domain_of_my_site>/nova到管理面板时,我有 404。因为,nova 的路由比我的 route-for-any-request 包含的路由晚。那么,如何解决呢?我怎么能把这个

Route::get('/{page}', 'PageController@myRouter')->where('page', '[A-Za-z0-9_\-\/]+');

真的到底是什么?

标签: laravellaravel-nova

解决方案


我的路由文件中的通用 slug 也有类似的问题。我设法将 slug 的模式限制为字母数字字符(包括破折号、连字符和斜杠*),但排除了 Nova 路由(nova-apinova-vendor)以及管理面板的 Nova 路径(nova)。

这是routes/web.php文件的样子:

Route::get('/{page}', 'PageController@myRouter');

{page}以及文件中RouteServiceProvider的模式app/Providers/RouteServiceProvider.php

public function boot()
{
    Route::pattern('page', '^(?!nova|nova-api|nova-vendor).[a-zA-Z0-9-_\/]+$');

    parent::boot();
}

*) 请注意,这种模式也允许像/page/one/two.


推荐阅读