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!