✅ Yes — totally achievable, and OpenLiteSpeed + Laravel makes it clean if you design it correctly. You want: Main SaaS domain → mamadil.team Seller pages hosted under → mamadil.team/{seller_slug} When seller points their own domain (e.g. susurizqi.com, salespage.mamadil.app) → Website still loads the same seller content URL becomes → sellerdomain.com, sellerdomain.com/sub-page1, etc. You do NOT want to manually register each domain inside OpenLiteSpeed. So we must: ✅ Accept unlimited domains automatically ✅ Let Laravel decide which seller to serve ✅ Use Cloudflare for SSL & DNS ✅ Single Virtual Host on OpenLiteSpeed OPENLITESPEED CONFIG (MOST IMPORTANT PART) 1️⃣ Create 1 Virtual Host only WebAdmin → Virtual Hosts → Add Field Value Virtual Host Name mamadil Virtual Host Root /var/www/mamadil Document Root /var/www/mamadil/public Save & restart. 2️⃣ Map Listener to ALL Domains WebAdmin → Listeners → SSL Listener (443) → Virtual Host Mapping Virtual Host: mamadil Domains: * ✔ This allows any domain to hit Laravel ✔ No need to add new seller domains manually ✅ SSL HANDLING (EASIEST METHOD) Since all domains are inside same Cloudflare account: ✅ Set Cloudflare Proxy = ON (orange cloud) For: mamadil.team susurizqi.com salespage.mamadil.app ✅ Cloudflare SSL Mode → Full (Strict) Cloudflare will automatically provide certificates for all connected domains. 📌 No need to generate certificates on server 📌 No wildcard certs needed 📌 No acme.sh automation required ✅ CLOUDFLARE DNS SETUP For seller domain susurizqi.com A susurizqi.com -> your_server_IP (Proxy ON) For seller subdomain salespage.mamadil.app A salespage -> your_server_IP (Proxy ON) ✅ LARAVEL MULTI-DOMAIN LOGIC 1️⃣ sellers table example id slug domain 1 susurizqi susurizqi.com 2 mamadil salespage.mamadil.app 2️⃣ Middleware to detect seller domain app/Http/Middleware/ResolveSeller.php namespace App\Http\Middleware; use Closure; use App\Models\Seller; class ResolveSeller { public function handle($request, Closure $next) { $host = $request->getHost(); // Check domain mapping $seller = Seller::where('domain', $host)->first(); if (! $seller) { // fallback — slug based access return $next($request); } // bind seller globally app()->instance('seller', $seller); return $next($request); } } Register middleware in Kernel.php 3️⃣ Routing Route::middleware('resolve.seller')->group(function () { // Seller via domain Route::get('/', fn () => view('seller.home', ['seller' => app('seller')]) ); // Seller sub pages Route::get('{page}', fn ($page) => view('seller.page', [ 'seller' => app('seller'), 'page' => $page ]) ); }); ✅ WHAT THIS ACHIEVES URL Output mamadil.team/susurizqi Seller page susurizqi.com Same seller page susurizqi.com/subpage1 Works salespage.mamadil.app Works new seller domain ✅ AUTOMATICALLY works No OpenLiteSpeed change No DNS setup required except A Record ✅ WHAT YOU MUST REQUIRE FROM SELLERS Before connecting domain: ✅ Add A record → your SaaS IP ✅ Cloudflare Proxy ON ✅ Wait for DNS propagation ✅ OPTIONAL IMPROVEMENTS ✅ Auto verify domain ownership via TXT ✅ Auto redirect www → non-www ✅ Custom 404 per seller ✅ Custom favicon per seller 🎯 SUMMARY ✅ 1 OpenLiteSpeed vhost ✅ Listener mapped to * ✅ Cloudflare handles SSL & DNS ✅ Laravel decides seller by domain ✅ Infinite domain support, zero manual config