Forcer la redirection HTTP vers HTTPS sur Laravel 8, 9 et plus
Votre hébergeur ne propose pas le HTTPS par défaut, vous ne pouvez pas modifier le htaccess… Comment faire ? J’ai LA réponse à vos questions.

Utiliser le HTTPS sur votre application est une obligation pour que vos visiteurs se sentent en sécurité.
Je vous donne mon astuce pour rediriger toutes vos URL vers le protocole HTTPS par défaut.
Ma méthode pour forcer le HTTPS
J’ai testé plusieurs moyens pour arriver à forcer le HTTPS :
- Ajouter une redirection dans le htaccess
- Modifier la configuration de mon Virtual Host
- Compter sur la bonne volonté de mon hébergeur
Aucune de ces techniques ne m’a apporté un résultat satisfaisant.
J’ai donc cherché un autre angle et j’ai enfin trouvé la solution qui me correspond : créer un Middleware.
J’utilise Laravel depuis 2018 et ma méthode reste inchangée aujourd’hui. Je vous la décris plus bas.
Créer et enregistrer le Middleware
Pour utiliser un Middleware avec Laravel il faut tout d’abord le créer puis ensuite l’enregistrer dans notre application.
Pour cela je créé en premier un fichier dans app/Http/Middleware/HttpsProtocol.php :
namespace App\Http\Middleware; use Closure; class HttpsProtocol { public function handle($request, Closure $next) { if (!$request->secure()) { return redirect()->secure($request->getRequestUri()); } return $next($request); }}
Je viens ensuite enregistrer ce Middleware dans le fichier app/Http/Kernel.php :
/** * The application's route middleware groups. * * @var array<string, array<int, class-string|string>> */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class,+ \App\Http\Middleware\HttpsProtocol::class, ], 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, 'throttle:api', \Illuminate\Routing\Middleware\SubstituteBindings::class, ], ];
Et voilà, peu importe le point d’entrée sur votre application l’utilisateur sera automatiquement redirigé vers une URL en HTTPS.
En bonus je vous donne un conseil pour forcer le schéma HTTPS sur toutes les URL de votre application.
BONUS : forcer le schéma HTTPS sur les URL
En complément d’une redirection HTTP vers HTTPS il est possible de forcer le schéma HTTPS sur les URL de votre application.
Pour y parvenir, modifier votre fichier app/Providers/AppServiceProvider.php comme ceci :
+Use Facade\URL /** * Bootstrap any application services. */ public function boot() { [...] + URL::forceScheme('https'); }