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:
# 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
// 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
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
class CursosController {
public function index() {
echo "Lista de cursos";
}
public function show($id) {
echo "Mostrando curso con ID: " . $id;
}
}
?>Modificación en index.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
Permisos en el servidor: Algunos hosting requieren habilitar manualmente el uso de .htaccess
Pruebas locales: Funciona perfectamente en servidores locales como XAMPP o WAMP
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
Publicar un comentario