路由工作的正则表达式不正确,并返回错误404

时间:2018-12-06 07:59:29

标签: regex laravel laravel-5.7

我具有用于匹配正确用户名的自定义正则表达式:

^(?=.{5,20}$)[a-zA-Z](?:[a-zA-Z0-9_]*[a-zA-Z0-9])?$

请参见demo

在这里您可以看到我的路线列表:

Route::middleware(['userActivity'])->group(function () {
    Route::group(['prefix' => '{nickname}','where' => ['nickname' => '^(?=.{5,20}$)[a-zA-Z](?:[a-zA-Z0-9_]*[a-zA-Z0-9])?$']], function ($nickname) {
        Route::name('user.')->namespace('User')->group(function () {            
            Route::middleware(['auth', 'company'])->group(function () {
                Route::namespace('Vacancy')->group( function () {
                    Route::prefix('vacancy')->name('vacancy.')->group( function () {
                        Route::get('/manage', "VacancyController@manage")->name('manage');
                        Route::post('/save', "VacancyController@save")->name('save');
                    });
                });
            });
        });
    });
});

在这种情况下,我要转到路线user.vacancy.manage

http://website.com/user_1544080981/vacancy/manage

返回错误:

  

找不到404页

当我将正则表达式更改为:

^(?=.{5,30}$)[a-zA-Z](?:[a-zA-Z0-9_]*[a-zA-Z0-9])?$

注意:仅在正则表达式中将最小长度和最大长度从{5,20}更改为{5,30}

通常,当我看到域名网址 length == 30

之后的部分网址时
user_1544081143/vacancy/manage

但是正则表达式只能仅用于用户昵称,而不是不带域名的部分url。我的路线哪里有错误?

1 个答案:

答案 0 :(得分:0)

正则表达式,在我看来,这是比上面更好的方法。

  Route::any('{all}', function(){
    return 'It Works';
})->where('all', '.*');

使用Route::fallback方法,您可以定义一个路由,当没有其他路由与传入请求匹配时将执行该路由。通常,未处理的请求将通过应用程序的异常处理程序自动呈现“ 404 ”页面。但是,由于您可以在fallback文件中定义routes/web.php路由,因此web中间件组中的所有中间件都将应用于该路由。当然,您可以根据需要随意向此路由添加其他中间件:

Route::fallback(function () {
    //
});