Условия, при котором URL будет доступен

В файле routes/web.php при указании URL, через метод where() можно указать условия, при котором URL будет доступен. Условия указываются через регулярные выражения.

// в {id} могут быть только числа
Route::get('news/{id}', [NewsController::class, 'show'])->whereNumber('id');
Route::get('news/{id}', [NewsController::class, 'show'])->where('id', '\d+');

// в {id} могут быть только латинские буквы
Route::get('news/{id}', [NewsController::class, 'show'])->whereAlpha('id');
Route::get('news/{id}', [NewsController::class, 'show'])->where('id', '[a-z]+');

// в {id} могут быть только числа или латинские буквы
Route::get('news/{id}', [NewsController::class, 'show'])->whereAlphaNumeric('id');
Route::get('news/{id}', [NewsController::class, 'show'])->where('id', '[\da-z]+');

// одно из указанных значений, например «ru» или «en» 
Route::get('{lang}/news', [NewsController::class, 'index'])->where('lang', 'ru|en');
Route::get('{lang}/news', [NewsController::class, 'index'])->whereIn('id', ['ru', 'en']);

Регулярное выражение \d разрешает использовать только числа, а знак + означает, что числа могут быть указаны в любом количестве.

Условие по умолчанию

Чтобы, например, не указывать для каждого параметра {id} условие where(), в файле app/Providers/RouteServiceProvider.php можно указать условие по умолчанию. 

# app/Providers/RouteServiceProvider.php

class RouteServiceProvider extends ServiceProvider
{

    public function boot()
    {
        // в URL для параметра {id} можно указывать только числа
        Route::pattern('id', '\d+');

        // указывается в версии Laravel 8 и ниже
        parent::boot();
    }

}