mod_rewrite: URLs limpias sin perder archivos ni parámetros
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.
0 comentarios
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.