فهرست
مقدمه
شاید تا به حال به این نکته توجه نکرده باشید ولی گاهی اوقات لازم است که یک دامنه را بر روی دامنه اصلی پارک کنید. در این صورت اگر دامنهی پارک شده را در بروزر باز کنید لاراول لینکها را بر اساس همان دامنهی پارک شده میسازد. مثلا اینجا dokaj.ir دامنه اصلی است ولی dokaj.com هم متعلق به من است و میخواهم اگر کسی این دامنه را زد به سایت برسد اما دلم نمیخواهد که در dokaj.com گردش کند انگار که دامنه اصلی dokaj.com است.
خوشبختانه من تمام لینکها را با توابعی نظیر route()
و action()
ساختهام و به همین خاطر کار چندان سختی برای حل این مشکل ندارم و فقط باید لاراول را مجبور کنیم که تمام لینکهایی را که میسازد با دامنهی dokaj.ir بسازد.
گام اول: ساخت میدلویر
در گام اول یک middleware ایجاد میکنیم و نام آن را AppPerRequest
میگذاریم.
php artisan make:middleware AppPerRequest
گام دوم: ویرایش میدلویر
میدلویر ساخته شده در فایل app/Http/Middleware/AppPerRequest.php
قرار گرفته است. آن را باز میکنیم و متد handle
را به شکل زیر تغییر میدهیم:
public function handle(Request $request, Closure $next): Response{ /* |---------------------------------------------------------------------- | Force application to work in same domain of | APP_URL environment variable. |---------------------------------------------------------------------- */ url()->formatHostUsing(function() { return config('app.url'); }); return $next($request);}
اگر از کامنت نوشته شده صرف نظر کنیم قسمت مهم همان سه خط هایلایت شده است. این سه خط به لاراول میفهماند هنگامی که با استفاده از توابعی نظیر route()
و یا action()
لینک میسازد برای پُر کردن قسمت دامنه، از مقدار ست شده در اندیس url در فایل config/app.php
استفاده کند. این اندیس هم به نوبهی خود از متغیر APP_URL که در فایل .env
ست شده است میخواند.
کادر زیر قسمت مورد نظر را در فایل config/app.php
نشان میدهد.
// ........................'url' => env('APP_URL', 'http://localhost'),// ........................
قبلا در فایل .env
متغیر APP_URL را به صورت زیر ست کردهایم.
APP_URL=https://www.dokaj.ir
گام سوم: رجیستر کردن میدلویر
حالا فقط میماند رجیستر کردن این میدلویر در لیست میدلویرهایی که باید در هر request لود شوند. در فایل app/Http/Kernel.php
خط هایلایت شدهی زیر را به آرایهی protected $middleware
اضافه میکنیم.
// app/Http/Kernel.php protected $middleware = [ // other middlewares // .......................... \App\Http\Middleware\AppPerRequest::class, ];
تمام! الان اگر dokaj.com را باز کنید وارد دامنه dokaj.com میشوید ولی با کلیک کردن روی هر لینکی به دامنهی dokaj.ir برمیگردید.
من محسن هستم؛ برنامهنویس سابق PHP و Laravel و Zend Framework و پایتون و فلسک. تمرکزم بیشتر روی لاراول بود! الان از صفر مشغول مطالعات اقتصادی هستم.
برای ارتباط با من یا در همین سایت کامنت بگذارید و یا به dokaj.ir(at)gmail.com ایمیل بزنید.
در مورد این مطلب یادداشتی بنویسید.