Да, есть готовые способы через конфиг сервера, но иногда проще и прозрачнее сделать это на уровне Laravel. Middleware ловит каждый запрос и решает: пропускаем его или кидаем на HTTPS.

Шаг 1: Создаём middleware

php artisan make:middleware RedirectToHttps

Laravel создаст app/Http/Middleware/RedirectToHttps.php.

Шаг 2: Реализуем редирект

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class RedirectToHttps
{
    public function handle(Request $request, Closure $next)
    {
        if (!$request->secure() && app()->environment('production')) {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

Логика проста: если запрос идёт не по HTTPS и мы в продакшне — кидаем редирект. Локально это не мешает.

Шаг 3: Регистрация middleware

Если нужен глобальный редирект для всех маршрутов, добавляем в $middleware в app/Http/Kernel.php:

protected $middleware = [
    // ...
    \App\Http\Middleware\RedirectToHttps::class,
];

Если нужен только для конкретных маршрутов, добавляем в $routeMiddleware:

protected $routeMiddleware = [
    // ...
    'https' => \App\Http\Middleware\RedirectToHttps::class,
];

И применяем в маршрутах:

Route::get('/example', 'ExampleController@index')->middleware('https');

Заключение

Вот и всё. Через этот middleware все HTTP-запросы автоматически отправляются на HTTPS. Работает просто, надёжно и без лишнего геморроя с серверными конфигами.