How do I make a Catch-All Route in Laravel

Solution 1:

You could also catch 'all' by using a regex on the parameter.

Route::group(['prefix' => 'premium-section'], function () {
    // other routes
    ...
    Route::get('{any}', function ($any) {
        ...
    })->where('any', '.*');
});

Also can catch the whole group if no routes are defined with an optional param.

Route::get('{any?}', function ($any = null) {
    ...
})->where('any', '.*');

This last one would catch 'domain.com/premium-section' as well.

Solution 2:

This does the trick:

Route::any('/{any}', 'MyController@myMethod')->where('any', '.*');

Solution 3:

  1. In app/Http/routes.php I create a route that will catch all traffic within domain.com/premium-section/anywhere/they/try/to/go and attempt to find and execute a matching function within PremiumSectionController
  2. But there aren't any matching methods, just a catch-all.

    Route::group(['as' => 'premium-section::',
                  'prefix' => 'premium-section',
                  'middleware' => ['web']],
                  function(){
                     Route::any('', 'PremiumSectionController@premiumContentIndex');
                     Route::controller('/', 'PremiumSectionController');
    
                  });
    

.

    namespace App\Http\Controllers;

    use ...

    class PremiumSectionController extends Controller{

        public function premiumContentIndex(){
           return 'no extra parameters';
        }

        //magically gets called by laravel
        public function missingMethod($parameters = array()){
            return $parameters;
        }

    }

Solution 4:

Laravel now has a built-in method for this:

https://laravel.com/docs/master/routing#fallback-routes