Construcción de Rutas-htaccess-59. Construcción de Rutas

Tutorial: Configuración de Rutas con .htaccess en PHP

Introducción

El archivo .htaccess es una herramienta poderosa para gestionar rutas en aplicaciones PHP, especialmente cuando trabajamos con el patrón Modelo-Vista-Controlador (MVC). Este tutorial te mostrará cómo configurar rutas amigables sin necesidad de crear carpetas físicas para cada ruta.

¿Qué es .htaccess?

Es un archivo de configuración de Apache que nos permite:

  • Reescribir URLs

  • Restringir acceso a directorios

  • Gestionar errores personalizados

  • Y mucho más

Paso 1: Crear el archivo .htaccess

Crea un archivo llamado .htaccess en la raíz de tu proyecto con este contenido:

apache
# Deshabilitar listado de directorios
Options -Indexes

# Habilitar reescritura de URLs
RewriteEngine On

# Condición: si la solicitud NO es para un archivo existente
RewriteCond %{REQUEST_FILENAME} !-f

# Condición: si la solicitud NO es para un directorio existente
RewriteCond %{REQUEST_FILENAME} !-d

# Regla: redirigir todas las solicitudes a index.php
RewriteRule ^(.*)$ index.php [L,QSA]

Paso 2: Configurar el enrutador en index.php

php
<?php
// Obtener la URI solicitada
$requestUri = $_SERVER['REQUEST_URI'];

// Eliminar parámetros de consulta (query string)
$uri = parse_url($requestUri, PHP_URL_PATH);

// Dividir la URI en segmentos
$segments = explode('/', trim($uri, '/'));

// Filtrar segmentos vacíos
$routes = array_filter($segments);

// Contar rutas
$routeCount = count($routes);

// Manejar las rutas según el número de segmentos
switch ($routeCount) {
    case 0:
        // Ruta principal: /
        echo "Bienvenido a la página principal";
        break;
        
    case 1:
        // Rutas de un segmento: /registro, /cursos
        $route = $routes[1];
        
        if ($route === 'registro') {
            echo "Estoy en registro";
            // Aquí incluirías tu controlador de registro
        } elseif ($route === 'cursos') {
            echo "Estoy en cursos";
            // Aquí incluirías tu controlador de cursos
        } else {
            // Ruta no encontrada
            http_response_code(404);
            echo "Página no encontrada";
        }
        break;
        
    case 2:
        // Rutas de dos segmentos: /cursos/1, /cursos/editar
        $mainRoute = $routes[1];
        $subRoute = $routes[2];
        
        if ($mainRoute === 'cursos' && is_numeric($subRoute)) {
            echo "Estoy en el curso con ID: " . $subRoute;
            // Aquí mostrarías un curso específico
        } else {
            http_response_code(404);
            echo "Página no encontrada";
        }
        break;
        
    default:
        http_response_code(404);
        echo "Página no encontrada";
        break;
}
?>

Paso 3: Estructura de archivos recomendada

text
proyecto/
│
├── .htaccess
├── index.php
├── controllers/
│   ├── RegistroController.php
│   └── CursosController.php
├── models/
│   ├── RegistroModel.php
│   └── CursosModel.php
└── views/
    ├── registro/
    └── cursos/

Paso 4: Implementación con controladores

Para una mejor organización, puedes crear controladores específicos:

controllers/CursosController.php

php
<?php
class CursosController {
    public function index() {
        echo "Lista de cursos";
    }
    
    public function show($id) {
        echo "Mostrando curso con ID: " . $id;
    }
}
?>

Modificación en index.php

php
// Después de determinar la ruta
if ($mainRoute === 'cursos') {
    require_once 'controllers/CursosController.php';
    $controller = new CursosController();
    
    if ($routeCount === 1) {
        $controller->index();
    } elseif ($routeCount === 2 && is_numeric($subRoute)) {
        $controller->show($subRoute);
    }
}

Consideraciones importantes

  1. Permisos en el servidor: Algunos hosting requieren habilitar manualmente el uso de .htaccess

  2. Pruebas locales: Funciona perfectamente en servidores locales como XAMPP o WAMP

  3. Rendimiento: Las reglas de reescritura tienen un mínimo impacto en el rendimiento

Conclusión

Con esta configuración:

  • ✅ No necesitas crear carpetas físicas para cada ruta

  • ✅ Mantienes una estructura MVC adecuada

  • ✅ Tienes URLs amigables y semánticas

  • ✅ Puedes escalar fácilmente tu aplicación

Comentarios

Entradas más populares de este blog

60. Construcción de Controladores

Api-60-2

Te ayudo a crear una API muy sencilla en PHP utilizando esos datos