Manejo de dominios/subdominios en Laravel

Video thumbnail

Índice de contenido

En este apartado quiero mostrarte dos cosas interesantes para manejar tu aplicación en Laravel y no solo el sistema de Autorización en Laravel con Gates y Policies que presentamos antes y que es ideal para dar accesos mediante subdominios dependiendo del perfil:

  • Cómo trabajar con subdominios o dominios.
  • Cómo agrupar rutas para mantener un esquema limpio y reutilizable.

Esto lo veremos tomando como ejemplo el proyecto de Academia que tengo en Desarrollo Libre, donde cuento con tres módulos principales:

  1. El de Academia que, que es la web de cursos y libros
  2. También tengo el de dashboard
  3. Y también tengo lo que es el blog

Para esto yo bueno para el de Academia como puedes ver es un subdominio y también el dashboard lo manejo con un subdominio:

if (config('app')['app_route'] == 'production') {
    Route::domain('academy.desarrollolibre.net')->group(function () {
        Route::get('/{n1?}/{n2?}/{n3?}/{n4?}', [AcademyController::class, 'index'])->name('course-vue');
    });
    Route::get('/academia', function () {
        return redirect('https://academy.desarrollolibre.net/');
    });
} else {
    Route::get('academia/{n1?}/{n2?}/{n3?}/{n4?}/{n5?}/{n6?}', [AcademyController::class, 'index'])->name('course-vue');
}

Laravel nos permite usar el tipo de ruta domain, donde podemos especificar un dominio o subdominio. En este caso, academy.desarrollolibre.net es el subdominio que apuntamos a la carpeta public de Laravel.

Dominios y subdominios

Video thumbnail

En local, para no complicarme creando subdominios, manejo el mismo proyecto con rutas normales y condicionales según el ambiente de desarrollo o producción.

Ejemplos de rutas que funcionan con parámetros opcionales:

  • https://academy.desarrollolibre.net/libros
  • https://academy.desarrollolibre.net/libro/visor/laravel/

Esto permite que cualquier ruta ingrese por los parámetros opcionales definidos en la ruta.

Laravel se encarga de manejar las rutas internamente, por lo que no hay mucho más que configurar.

Entonces por aquí vamos a ver cómo es la operación por aquí tenemos es tan sencillo un tipo de ruta llamado domain en el cual nosotros podemos colocar ya sea un dominio o un subdominio que justamente lo que yo estoy colocando por acá tal cual puedes ver simplemente coloco aquí el subdominio y poco más que decir realmente por aquí a la final esto como es la de Vue entonces lo que hago el truquito entre comillas que coloco aquí opcionales para precisamente manejar el el ruteado:

Route::get('academia/{n1?}/{n2?}/{n3?}/{n4?}/{n5?}/{n6?}', [AcademyController::class, 'index'])->name('course-vue');

Fíjate también otro punto interesante que recuerda que también la aplicación por más que sea la tengo que desarrollar por tal motivo yo en local me da mucho fastidio estar creando subdominios y demás por lo tanto yo lo manejo de la manera clásica que sería aquí colocar directamente preguntar por el ambiente de si estamos en desarrollo a producción para emplear el esquema de dominios o subdominios o directamente una ruta.

Esto permite mantener un esquema sencillo en local y aprovechar la estructura de subdominios en producción; para seguir personalizando tu aplicación con accesos específicos dependiendo del rol, permisos…, el siguiente paso es aprender a Manejar Preferencias de Usuario.

Hablaremos sobre como puedes agrupar tus rutas en dominios y como puedes agrupar para reutilizar rutas en funciones.


Únete a la comunidad de desarrolladores que han decidido dejar de picar código y empezar a construir productos reales. Recibe mis mejores trucos de arquitectura cada semana:

Acepto recibir anuncios de interes sobre este Blog.

Andrés Cruz

EN In english