~/cuaderno / 2021 / entrada-794.md

mod_rewrite: URLs limpias sin perder archivos ni parámetros

Publicado 22 enero 2021 2 min de lectura Revisado 14 septiembre 2026
Apache / la ruta de una url. El controlador frontal recibe las rutas de la aplicación

mod_rewrite permite transformar cómo Apache resuelve una URL sin obligar al visitante a conocer la estructura interna de los archivos. Para una aplicación con un controlador frontal, una petición como /articulo/terminal puede terminar en index.php.

Una base para un controlador frontal

En un .htaccess situado en la raíz de la aplicación:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

Las condiciones dejan pasar archivos y directorios que existen. La regla envía el resto al controlador. Dentro de .htaccess, el patrón no recibe una barra inicial como si fuera la URL completa.

Esto exige que Apache tenga el módulo y permita las directivas correspondientes. Si Nginx atiende la petición sin pasar por Apache, .htaccess no participa.

Reescritura y redirección

Una reescritura interna cambia el destino dentro del servidor. Una redirección devuelve una respuesta para que el navegador pida otra URL. No añadas una redirección permanente mientras pruebas: puede quedar almacenada en caché.

[L] termina la ronda actual de reglas. [QSA] sirve para combinar la consulta original con una nueva consulta introducida por la sustitución; no hace falta añadirlo por costumbre a todas las reglas.

La ruta todavía debe validarse

Una URL bonita no convierte su contenido en fiable. Valida los parámetros en la aplicación y utiliza consultas preparadas al acceder a la base de datos. Prueba rutas existentes, inexistentes, archivos estáticos y URLs con parámetros antes de activar el cambio.

Referencia: mod_rewrite de Apache.

Compartir: X / Twitter LinkedIn Reddit Email
Siguiente comando: volver al archivo o pulsa Ctrl + K

0 comentarios

TIP RÁPIDO

Sé concreto, añade contexto (versión, distro, stack) y si puedes pega logs en bloque de código. Menos drama, más señales.

nginx plesk mariadb logs

Deja una respuesta

NormaRespeto, claridad, y cero spam. El email no se publica.

Consejo: usa bloques de código para logs. Ej: ```log ... ```

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.