فهرست

مقدمه

شاید تا به حال به این نکته توجه نکرده باشید ولی گاهی اوقات لازم است که یک دامنه را بر روی دامنه اصلی پارک کنید. در این صورت اگر دامنه‌‌ی پارک شده را در بروزر باز کنید لاراول لینک‌ها را بر اساس همان دامنه‌ی پارک شده می‌سازد. مثلا اینجا 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 برمی‌گردید.

نوشته شده در: 1403-01-27 (1 ماه 6 روز 16 ساعت پیش)

من محسن هستم؛ برنامه‌نویس PHP و Laravel و Zend Framework و پایتون و فلسک، ولی بیشتر تمرکزم روی لاراول است. این سایت را اولین بار با فلسک نوشتم ولی بعد تصمیم گرفتم آن را با لاراول نیز پیاده‌سازی کنم. هم نسخه‌ی فسلک و هم نسخه‌ی لاراول را می‌توانید روی گیت‌هابم پیدا و دانلود کنید.

برای ارتباط با من یا در همین سایت کامنت بگذارید و یا به dokaj.ir(at)gmail.com ایمیل بزنید.

شهروز 2024-04-20 19:28:44

چرا بجای این کارا دامنه‌ پارک شده رو ریدایرکت نکردی به دامنه اصلی؟ پاسخ

در مورد این مطلب یادداشتی بنویسید.