Laravel 5 - alihkan ke HTTPS

127

Bekerja pada proyek Laravel 5 pertama saya dan tidak yakin di mana atau bagaimana menempatkan logika untuk memaksa HTTPS di aplikasi saya. Penentu di sini adalah bahwa ada banyak domain yang menunjuk ke aplikasi dan hanya dua dari tiga yang menggunakan SSL (yang ketiga adalah domain fallback, cerita panjang). Jadi saya ingin menangani ini dalam logika aplikasi saya daripada .htaccess.

Di Laravel 4.2 saya menyelesaikan pengalihan dengan kode ini, yang terletak di filters.php:

App::before(function($request)
{
    if( ! Request::secure())
    {
        return Redirect::secure(Request::path());
    }
});

Saya berpikir Middleware adalah tempat di mana sesuatu seperti ini harus diimplementasikan tetapi saya tidak dapat memahaminya dengan menggunakannya.

Terima kasih!

MEMPERBARUI

Jika Anda menggunakan Cloudflare seperti saya, ini dilakukan dengan menambahkan Aturan Halaman baru di panel kontrol Anda.

NightMICU
sumber
Jadi apa yang terjadi dengan domain ke-3? Jika Anda memaksa https di semua rute - akankah domain ke-3 tetap berfungsi?
Laurence
Mendeteksi itu dengan$_SERVER['HTTP_HOST']
NightMICU
Berapa lama waktu yang dibutuhkan untuk aturan halaman cloudflare berlaku
CodeGuru
Oh saya harus mengaktifkan proxy dalam pengaturan DNS haha!
CodeGuru

Jawaban:

253

Anda dapat membuatnya bekerja dengan kelas Middleware. Biarkan saya memberi Anda ide.

namespace MyApp\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\App;

class HttpsProtocol {

    public function handle($request, Closure $next)
    {
            if (!$request->secure() && App::environment() === 'production') {
                return redirect()->secure($request->getRequestUri());
            }

            return $next($request); 
    }
}

Kemudian, terapkan middleware ini ke setiap permintaan yang menambahkan pengaturan aturan pada Kernel.phpfile, seperti:

protected $middleware = [
    'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
    'Illuminate\Cookie\Middleware\EncryptCookies',
    'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
    'Illuminate\Session\Middleware\StartSession',
    'Illuminate\View\Middleware\ShareErrorsFromSession',

    // appending custom middleware 
    'MyApp\Http\Middleware\HttpsProtocol'       

];

Pada contoh di atas, middleware akan mengarahkan setiap permintaan ke https jika:

  1. Permintaan saat ini tidak disertai protokol aman (http)
  2. Jika lingkungan Anda sama dengan production. Jadi, sesuaikan saja pengaturannya sesuai dengan preferensi Anda.

Cloudflare

Saya menggunakan kode ini di lingkungan produksi dengan WildCard SSL dan kode bekerja dengan benar. Jika saya menghapus && App::environment() === 'production'dan mengujinya di localhost, pengalihan juga berfungsi. Jadi, menginstal atau tidak SSL bukanlah masalahnya. Sepertinya Anda perlu sangat memperhatikan lapisan Cloudflare Anda agar dapat dialihkan ke protokol Https.

Edit 23/03/2015

Terima kasih @Adam Linkatas saran: kemungkinan besar disebabkan oleh header yang dilewati Cloudflare. CloudFlare kemungkinan besar menyerang server Anda melalui HTTP dan meneruskan header X-Forwarded-Proto yang menyatakan itu meneruskan permintaan HTTPS. Anda perlu menambahkan baris lain di Middleware yang bertuliskan ...

$request->setTrustedProxies( [ $request->getClientIp() ] ); 

... untuk mempercayai header yang dikirim CloudFlare. Ini akan menghentikan loop pengalihan

Sunting 27/09/2016 - Laravel v5.3

Hanya perlu menambahkan kelas middleware ke dalam webgrup di kernel.php file:

protected $middlewareGroups = [
    'web' => [
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,

        // here
        \MyApp\Http\Middleware\HttpsProtocol::class

    ],
];

Ingat bahwa webgrup diterapkan ke setiap rute secara default, jadi Anda tidak perlu menyetel websecara eksplisit di rute maupun pengontrol.

Sunting 23/08/2018 - Laravel v5.7

  • Untuk mengalihkan permintaan tergantung lingkungan yang dapat Anda gunakan App::environment() === 'production'. Untuk versi sebelumnya adalah env('APP_ENV') === 'production'.
  • Menggunakan \URL::forceScheme('https');sebenarnya tidak mengalihkan. Itu hanya membangun tautan https://setelah situs web dirender.
manix
sumber
5
Ini sepertinya memberi saya pengalihan pengalihan ... sepertinya itu harus berhasil. Saya tidak tahu apakah ada bedanya tetapi kami menggunakan Cloudflare SSL. Tapi saya tidak berpikir itu akan mengubah pengalihan sederhana.
NightMICU
3
@NightMICU Saya tidak yakin apakah Anda telah memecahkan masalah dengan pengalihan, tetapi kemungkinan disebabkan oleh header yang lewat Cloudflare. CloudFlare kemungkinan besar menyerang server Anda melalui HTTP dan meneruskan header X-Forwarded-Proto yang menyatakan itu meneruskan permintaan HTTPS. Anda perlu menambahkan baris lain di Middleware Anda yang mengatakan $request->setTrustedProxies( [ $request->getClientIp() ] );untuk mempercayai header yang dikirim CloudFlare. Ini akan menghentikan loop pengalihan.
Adam Link
2
@manix Luar biasa. Baru saja melalui masalah HTTPS akhir pekan ini dengan proyek saya sendiri - hal-hal kecil itu akan membuat Anda frustrasi selama berjam-jam!
Adam Link
8
Jawaban yang sangat bagus! Hanya satu detail: Lebih baik menggunakan pengalihan 301 untuk menunjukkan kepada Google bahwa itu adalah pergerakan permanen. Seperti:return redirect()->secure($request->getRequestUri(), 301);
adriaroca
4
bagi mereka yang di bawah penyeimbang beban atau proxy dapat mengubah ke mengamankan () agar $request->server('HTTP_X_FORWARDED_PROTO') != 'https'ini berfungsi untuk saya
Shiro
63

Opsi lain yang berfungsi untuk saya, di AppServiceProvider tempatkan kode ini di metode boot:

\URL::forceScheme('https');

Fungsi yang ditulis sebelum forceSchema ('https') salah, forceScheme-nya

Constantin Stan
sumber
16
Hei, baru saja menemukan ini melalui googling sekitar - perhatikan bahwa dalam 5,4 itu\URL::forceScheme('https');
dev
5
Dalam file yang sama, Anda juga dapat melakukannyaif($this->app->environment() === 'production'){ $this->app['request']->server->set('HTTPS', true); }
Rory
2
maksudmu\URL::forceScheme('https')
Ernest Okot
17
Saya cukup yakin bahwa ini hanya untuk membangun tautan. Ini tidak akan memaksa pengguna untuk https, ini hanya akan menyajikan tautan yang ditambahkan dengan https: //
Weston Watson
ya itu terjadi @WestonWatson. silakan bagikan solusinya jika ditemukan
Harat
33

Atau, Jika Anda menggunakan Apache, Anda dapat menggunakan .htaccessfile untuk memaksa URL Anda menggunakan httpsawalan. Pada Laravel 5.4, saya menambahkan baris berikut ke .htaccessfile saya dan itu berhasil untuk saya.

RewriteEngine On

RewriteCond %{HTTPS} !on
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Assad Ullah Ch
sumber
2
Ini tidak baik jika Anda memiliki banyak lingkungan (dev, stage, produksi) daripada Anda perlu menyetel SSL pada semuanya.
Mladen Janjetovic
@MladenJanjetovic dapat Anda gunakan RewriteCond %{HTTP_HOST} !=localhostdi dev untuk menyiasati ini.
Dan
3
@Dan - Ya, tetapi Anda masih harus mengaturnya untuk stage, local (dan ini lebih rumit jika pengembang menggunakan URL yang berbeda dalam pengembangan lokal, misalnya .dev, .local, subdomains, ... dll). Saya lebih suka memiliki logika semacam itu dalam aplikasi.
Mladen Janjetovic
16

untuk laravel 5.4 gunakan format ini untuk mendapatkan pengalihan https, bukan .htaccess

namespace App\Providers;

use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        URL::forceScheme('https');
    }
}
Arun Yokesh
sumber
15
Hanya untuk memperjelas: 1) perubahan ini harus dilakukan di app / Providers / AppServiceProvider.php; 2) ini hanya untuk mengatur tautan yang dihasilkan di dalam aplikasi untuk menggunakan SSL, ini tidak memaksa Anda untuk menggunakan SSL
phoenix
Hai, Rute tidak dihasilkan dengan metode ini jika saya mengklik tombol yang mengirim saya ke rute berikutnya yang tidak memberi saya kesalahan 404
Saket Sinha
Ini bukan pengalihan https. Tetapi memungkinkan penyajian https: // situs. Jika Anda mengubahnya menjadi http: // ini juga akan berfungsi.
franc
12

Mirip dengan jawaban manix tetapi di satu tempat. Middleware untuk memaksa HTTPS

namespace App\Http\Middleware;

use Closure;

use Illuminate\Http\Request;

class ForceHttps
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!app()->environment('local')) {
            // for Proxies
            Request::setTrustedProxies([$request->getClientIp()]);

            if (!$request->isSecure()) {
                return redirect()->secure($request->getRequestUri());
            }
        }

        return $next($request);
    }
}
Mladen Janjetovic
sumber
apakah Request harus statis?
GFxJamal
@jRhesk mungkin tidak, tapi silakan coba dan jangan ragu untuk mengubah jawabannya
Mladen Janjetovic
8

Ini untuk Larave 5.2.x dan yang lebih baru. Jika Anda ingin memiliki opsi untuk menyajikan beberapa konten melalui HTTPS dan lainnya melalui HTTP, berikut adalah solusi yang berhasil untuk saya. Anda mungkin bertanya-tanya, mengapa seseorang hanya ingin menyajikan beberapa konten melalui HTTPS? Mengapa tidak menyajikan semuanya melalui HTTPS?

Meskipun, tidak masalah untuk menyajikan seluruh situs melalui HTTPS, memutuskan semuanya melalui HTTPS memiliki biaya tambahan di server Anda. Ingat enkripsi tidak murah. Overhead kecil juga berdampak pada waktu respons aplikasi Anda. Anda dapat berargumen bahwa perangkat keras komoditas itu murah dan dampaknya dapat diabaikan tetapi saya ngelantur :) Saya tidak suka ide menyajikan konten pemasaran halaman besar dengan gambar dll melalui https. Jadi begini. Ini mirip dengan apa yang orang lain sarankan di atas menggunakan middleware tetapi ini adalah solusi lengkap yang memungkinkan Anda untuk beralih antara HTTP / HTTPS.

Pertama buat middleware.

php artisan make:middleware ForceSSL

Seperti inilah middleware Anda seharusnya.

<?php

namespace App\Http\Middleware;

use Closure;

class ForceSSL
{

    public function handle($request, Closure $next)
    {

        if (!$request->secure()) {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

Perhatikan bahwa saya tidak memfilter berdasarkan lingkungan karena saya memiliki pengaturan HTTPS untuk pengembang lokal dan produksi sehingga tidak perlu.

Tambahkan yang berikut ini ke routeMiddleware \ App \ Http \ Kernel.php Anda sehingga Anda dapat memilih dan memilih grup rute mana yang harus memaksa SSL.

    protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'forceSSL' => \App\Http\Middleware\ForceSSL::class,
];

Selanjutnya, saya ingin mengamankan dua grup dasar login / signup dll dan yang lainnya di belakang middleware Auth.

Route::group(array('middleware' => 'forceSSL'), function() {
/*user auth*/
Route::get('login', 'AuthController@showLogin');
Route::post('login', 'AuthController@doLogin');

// Password reset routes...
Route::get('password/reset/{token}', 'Auth\PasswordController@getReset');
Route::post('password/reset', 'Auth\PasswordController@postReset');

//other routes like signup etc

});


Route::group(['middleware' => ['auth','forceSSL']], function()
 {
Route::get('dashboard', function(){
    return view('app.dashboard');
});
Route::get('logout', 'AuthController@doLogout');

//other routes for your application
});

Konfirmasikan bahwa middlewares Anda diterapkan ke rute Anda dengan benar dari konsol.

php artisan route:list

Sekarang Anda telah mengamankan semua formulir atau area sensitif aplikasi Anda, kuncinya sekarang adalah menggunakan templat tampilan Anda untuk menentukan tautan aman dan publik (non https).

Berdasarkan contoh di atas, Anda akan membuat tautan aman Anda sebagai berikut -

<a href="{{secure_url('/login')}}">Login</a>
<a href="{{secure_url('/signup')}}">SignUp</a>

Tautan tidak aman dapat dirender sebagai

<a href="{{url('/aboutus',[],false)}}">About US</a></li>
<a href="{{url('/promotion',[],false)}}">Get the deal now!</a></li>

Apa yang dilakukannya adalah merender URL yang sepenuhnya memenuhi syarat seperti https: // yourhost / login dan http: // yourhost / aboutus

Jika Anda tidak merender URL yang sepenuhnya memenuhi syarat dengan http dan menggunakan url tautan relatif ('/ aboutus'), https akan tetap ada setelah pengguna mengunjungi situs yang aman.

Semoga ini membantu!

na-98
sumber
7

Bagaimana dengan hanya menggunakan file .htaccess untuk mencapai https redirect? Ini harus ditempatkan di root proyek (bukan di folder publik). Server Anda perlu dikonfigurasi untuk mengarah ke direktori akar proyek.

<IfModule mod_rewrite.c>
   RewriteEngine On
   # Force SSL
   RewriteCond %{HTTPS} !=on
   RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
   # Remove public folder form URL
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Saya menggunakan ini untuk laravel 5.4 (versi terbaru saat menulis jawaban ini) tetapi itu harus terus berfungsi untuk versi fitur bahkan jika laravel mengubah atau menghapus beberapa fungsionalitas.

Maulik Gangani
sumber
Chrome memberi saya kesalahan: Terlalu banyak pengalihan .. Sepertinya ini membuat putaran
phoenix
Hai, saya telah memperbarui jawaban. Pastikan Anda meletakkan .htaccess ini di direktori root proyek dan mengarahkan server Anda (konfigurasi apache) ke root proyek.
Maulik Gangani
1
@MladenJanjetovic Anda dapat memiliki file htaccess berbeda untuk lingkungan ini
Burgi
1
@MladenJanjetovic memiliki itu dalam aplikasi pasti memiliki kelebihan, tetapi dari perspektif efisiensi dan kecepatan menurut saya menguntungkan untuk memiliki ini di konfigurasi server sehingga Anda tidak perlu memuat Laravel hanya untuk pengalihan. Konfigurasi khusus lingkungan dalam satu versi .htaccess dapat dicapai dengan menggunakan kondisi penulisan ulang untuk memeriksa domain, sepertiRewriteCond %{HTTP_HOST} productiondomain\.com$ [NC]
Chris
1
Saya juga lebih suka menempatkan ini di .htaccess di direktori root, dan seperti yang dikatakan Crhis, pengaturan khusus lingkungan dapat dilakukan di sini, meskipun sedikit kurang elegan daripada di solusi Mladen.
jovan
6

Anda dapat menggunakan RewriteRule untuk memaksa ssl di .htaccess folder yang sama dengan index.php Anda.
Silakan tambahkan sebagai gambar lampirkan, tambahkan sebelum semua aturan yang lain pengaturan ssl .htaccess

Quy Le
sumber
3

di IndexController.php letakkan

public function getIndex(Request $request)
{
    if ($request->server('HTTP_X_FORWARDED_PROTO') == 'http') {

        return redirect('/');
    }

    return view('index');
}

di AppServiceProvider.php put

public function boot()
{
    \URL::forceSchema('https');

}

Di AppServiceProvider.php setiap redirect akan masuk ke url https dan untuk request http kita perlu sekali redirect jadi di IndexController.php cukup kita lakukan sekali redirect

Artur Qaramyan
sumber
Bisakah Anda menjelaskan bagaimana jawaban Anda menyelesaikan pertanyaan?
soundslikeodd
Tolong tambahkan penjelasan ini ke jawaban Anda.
soundslikeodd
3

Saya menambahkan alternatif ini karena saya sangat menderita dengan masalah ini. Saya mencoba semua cara berbeda dan tidak ada yang berhasil. Jadi, saya menemukan solusi untuk itu. Ini mungkin bukan solusi terbaik tetapi berhasil -

FYI, saya menggunakan Laravel 5.6

if (App::environment('production')) {
    URL::forceScheme('https');
}

produksi <- Ini harus diganti dengan nilai APP_ENV di file .env Anda

thebrownkid
sumber
2

Berikut cara melakukannya di Heroku

Untuk memaksa SSL pada dynos Anda tetapi tidak secara lokal, tambahkan ke akhir .htaccess Anda di publik /:

# Force https on heroku...
# Important fact: X-forwarded-Proto will exist at your heroku dyno but wont locally.
# Hence we want: "if x-forwarded exists && if its not https, then rewrite it":
RewriteCond %{HTTP:X-Forwarded-Proto} .
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Anda dapat mengujinya di komputer lokal Anda dengan:

curl -H"X-Forwarded-Proto: http" http://your-local-sitename-here

Itu mengatur header X-diteruskan ke bentuk yang akan diambilnya di heroku.

yaitu mensimulasikan bagaimana seorang heroku dyno akan melihat permintaan.

Anda akan mendapatkan respons ini di komputer lokal Anda:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://tm3.localhost:8080/">here</a>.</p>
</body></html>

Itu adalah pengalihan. Itulah yang akan diberikan oleh heroku kepada klien jika Anda menyetel .htaccess seperti di atas. Tetapi itu tidak terjadi di komputer lokal Anda karena X-forwarded tidak akan disetel (kami memalsukannya dengan curl di atas untuk melihat apa yang terjadi).

mwal
sumber
2

Jika Anda menggunakan CloudFlare, Anda dapat membuat Aturan Halaman untuk selalu menggunakan HTTPS: Paksa SSL Cloudflare Ini akan mengarahkan setiap http: // permintaan ke https: //

Selain itu, Anda juga harus menambahkan sesuatu seperti ini ke fungsi \ app \ Providers \ AppServiceProvider.php boot ():

if (env('APP_ENV') === 'production' || env('APP_ENV') === 'dev') {
     \URL::forceScheme('https');
}

Ini akan memastikan bahwa setiap tautan / jalur di aplikasi Anda menggunakan https: //, bukan http: //.

butaminas
sumber
2

Pendekatan yang sedikit berbeda, diuji di Laravel 5.7

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Str;

class ForceHttps
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {    
        if ( !$request->secure() && Str::startsWith(config('app.url'), 'https://') ) {
            return redirect()->secure($request->getRequestUri());
        }
        return $next($request);
    }
}

PS. Kode diperbarui berdasarkan komentar @ matthias-lill.

Zoli
sumber
1
Bekerja pada Laravel 6 juga.
Rubens
1
menggunakan fungsi env () tidak akan bekerja dengan file konfigurasi yang di-cache. Ini seharusnya mengarah ke config('app.url'). Selain itu, Laravel hadir dengan fungsi string yang sangat berguna Str::startsWith(config('app.url'), 'https://').
Matthias Lill
1

Untuk Laravel 5.6, saya harus sedikit mengubah kondisi agar berfungsi.

dari:

if (!$request->secure() && env('APP_ENV') === 'prod') {
return redirect()->secure($request->getRequestUri());
}

Untuk:

if (empty($_SERVER['HTTPS']) && env('APP_ENV') === 'prod') {
return redirect()->secure($request->getRequestUri());
}
Priyank
sumber
1

Ini berhasil bagi saya. Saya membuat kode php khusus untuk memaksa mengarahkannya ke https. Cukup sertakan kode ini di header.php

<?php
if (isset($_SERVER['HTTPS']) &&
    ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
    isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
    $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
  $protocol = 'https://';
}
else {
  $protocol = 'http://';
}
$notssl = 'http://';
if($protocol==$notssl){
    $url = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";?>
    <script> 
    window.location.href ='<?php echo $url?>';
    </script> 
 <?php } ?>
Geeky Ashim
sumber
1

Saya menggunakan middleware Laravel 5.6.28 berikutnya:

namespace App\Http\Middleware;

use App\Models\Unit;
use Closure;
use Illuminate\Http\Request;

class HttpsProtocol
{
    public function handle($request, Closure $next)
    {
        $request->setTrustedProxies([$request->getClientIp()], Request::HEADER_X_FORWARDED_ALL);

        if (!$request->secure() && env('APP_ENV') === 'prod') {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}
fomvasss
sumber
1

Cara termudah adalah di level aplikasi. Di dalam file

app/Providers/AppServiceProvider.php

tambahkan yang berikut ini:

use Illuminate\Support\Facades\URL;

dan dalam metode boot () tambahkan yang berikut ini:

$this->app['request']->server->set('HTTPS', true);
URL::forceScheme('https');

Ini harus mengarahkan semua permintaan ke https di tingkat aplikasi.

(Catatan: ini telah diuji dengan laravel 5.5 LTS)

Pinak Saha
sumber
1

Anda dapat dengan mudah pergi ke app -> Providers -> AppServiceProvider.php

tambahkan dua baris

gunakan Illuminate \ Support \ Facades \ URL;

URL :: forceScheme ('https');

seperti yang ditunjukkan pada kode berikut:

use Illuminate\Support\Facades\URL;

class AppServiceProvider extends ServiceProvider
{
   public function boot()
    {
        URL::forceScheme('https');

       // any other codes here, does not matter.
    }
Wria Mohammed
sumber
0

Ini berfungsi untuk saya di Laravel 7.x dalam 3 langkah sederhana menggunakan middleware:

1) Buat middleware dengan perintah php artisan make:middleware ForceSSL

Middleware

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\App;

class ForceSSL
{
    public function handle($request, Closure $next)
    {
        if (!$request->secure() && App::environment() === 'production') {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }
}

2) Daftarkan middleware di routeMiddlewaredalam file Kernel

Inti

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

3) Gunakan di rute Anda

Rute

Route::middleware('ssl')->group(function() {
    // All your routes here

});

di sini dokumentasi lengkap tentang middlewares

========================

Metode .HTACCESS

Jika Anda lebih suka menggunakan .htaccessfile, Anda dapat menggunakan kode berikut:

<IfModule mod_rewrite.c>
    RewriteEngine On 
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://yourdomain.com/$1 [R,L]
</IfModule>

Salam!

Radames E. Hernandez
sumber