Salah satu permasalahan yang saya temukan saat membuat project dengan laravel adalah masalah session. Dikarenakan sepengetahuan saya session pada project Laravel ini tidak dapat dibaca oleh project lain yang masih menggunakan PHP Native maka saya memutuskan untuk menggunakan 2 macam session pada project Laravel saya. Yang pertama session bawaan dari laravel dan yang kedua adalah $_SESSION yang juga bawaan dari PHP itu sendiri.
Dari apa yang saya temukan selama pengerjaan project tersebut, penggunaan $_SESSION ini dapat dibaca oleh program yang menggunakan Laravel maupun Native dalam satu domain yang sama. Namun kendala yang muncul adalah $_SESSION pada url dengan menggunakan www tidak akan dikenali saat kita mengkakses url tersebut tanpa www. Jadi salah satu solusi termudah yang saya gunakan adalah memaksa program Laravel yang saya membuat untuk melakukan redirect semua url tanpa www menjadi menggunakan www.
Hal seperti ini seharusnya juga bisa dilakukan melalui htaccess ataupun melakukan setting / pengaturan pada server yang kita gunakan. Namun saya mengalami kendala dalam pengaturan htaccess maupun setting server jadi ya cara inilah yang saya pakai untuk saat ini. Berikut ini adalah langkah-langkah singkat bagaimana menerapkan cara tersebut.
#MENAMBAHKAN VARIABEL PADA .ENV
Cara yang biasanya saya lakukan adalah dengan menambahkan variabel pada file .env yang saya gunakan. Hal ini dimaksudkan agar saya tidak perlu mengganti kode saya saat saya mengerjakan di localhost ataupun di server. Cukup membedakan isi dari variabel pada file .env untuk membedakan apaakah saya sedang bekerja di localhost atau di server. Di sini saya menggunakan kode sebagai berikut :
APP_WWW = false
Cara kerja nya adalah saat nilai APP_WWW ini false maka program tidak akan melakukan redirect ke url www dan sebaliknya.
#MEMBUAT MIDDLEWARE BARU
Di sini saya menggunakan nama file PreferredDomain.php. Untuk yang belum tahu bagaimana cara membuat middleware di Laravel baca artikel https://ozkadon.blogspot.com/2018/07/tutorial-laravel-55-middleware.html ini dulu aja ya :). Berikut ini adalah kode dari file middleware PreferredDomain.php yang saya buat
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Redirect;
/**
* Class PreferredDomain
* @package App\Http\Middleware
*/
class PreferredDomain
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (env('APP_WWW')){
if (!starts_with($request->header('host'), 'www.')) {
$host = 'www.'.$request->header('host');
$request->headers->set('host', $host);
return Redirect::to($request->fullUrl(), 301);
}
}
return $next($request);
}
}
Cara kerja dari kode di atas adalah, program akan membaca isi dari variabel APP_WWW yang kita buat sebelumnya tadi. Jika bernilai true maka program akan mengecek apakah url yang kita akses berawalan dengan www. Jika tidak maka program akan menambahkan awalan www pada url tadi dan kemudian melakukan redirect ke url dengan www tersebut.
#REGISTER MIDDLEWARE
Langkah terakhir adalah melakukan register middleware yang baru saja kita buat tadi. Caranya adalah dengan mengedit file Kernel.php yang terdapat pada direktori app\Http. Tambahkan kode berikut
\App\Http\Middleware\PreferredDomain::class,
sehingga secara keseluruhan akan menjadi seperti kode berikut :
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\PreferredDomain::class,
];
Di sini saya meregister middleware ini di dalam variabel $middleware. Hal ini dimaksudkan agar semua url yang kita akses akan melalui proses middleware ini terlebih dahulu.
Demikianlah penjelasan pada artikel Tutorial Laravel 5.5 - Redirect url non www ke www ini. Semoga pejelasan-penjelasan pada artikel ini dapat dengan mudah dimengerti dan selamat mencoba.
Post a Comment
Post a Comment