Archivo .htaccess «a medida»

Hoy os traigo un .htaccess a medida de un manual/tutorial que encontré hace tiempo en el blog JourmolyIntroducción a MVC con PHP (Parte 1 | Parte 2). Los artículos ya tienen un tiempo, son de 2007 y 2008, pero siguen dando una solución muy buena para aplicar el patrón MVC y la programación orientada a objetos en PHP sin depender de ningún framework. Tecleando el código desde cero.

Yo mismo he usado como base esos tutoriales en alguna aplicación, pero las urls resultantes resultaban bastante desagradables:

http://miaplicacion.com/?controlador=user&accion=edit

Había que hacerlas mas «amigables». Algo como:

http://miaplicacion.com/user/edit/

Y con este .htaccess se consigue casi al 100%.

1
2
3
4
5
6
7
RewriteEngine On
RewriteCond %{QUERY_STRING} ^([^/]+)
RewriteRule ^([a-z0-9-_]+)/([a-z0-9-_]+)(/)?$ index.php?controlador=$1&accion=$2&%1 [NC]
RewriteRule ^([a-z0-9-_]+)/([a-z0-9-_]+)(/)?$ index.php?controlador=$1&accion=$2 [NC]
RewriteCond %{QUERY_STRING} ^([^/]+)
RewriteRule ^([a-z0-9-_]+)(/)?$ index.php?controlador=$1&%1 [NC]
RewriteRule ^([a-z0-9-_]+)(/)?$ index.php?controlador=$1 [NC]

El .htaccess es muy sencillo. Básicamente si pasamos dos parámetros el primero es el controlador y el segundo es la acción , y si solo pasamos uno es el controlador. Como parámetro se acepta cualquier carácter que sea una letra (Ñ no), un número, guión medio o guión bajo y con el flag [NC] (no case) le decimos que no distinga entre mayúsculas y minúsculas.

Lo que lo complica un poco es permitir que se puedan pasar más parámetros adicionales con el método Get. Para ello capturamos cualquier carácter escrito a continuación del interrogante de la url con la directiva RewriteCond y lo añadimos al final en la siguiente RewriteRule, si no se da la condición de que haya un interrogante seguido de cualquier carácter que no sea la barra invertida la ejecución pasará a la segunda RewriteRule. Esto se repite para uno y para dos parámetros.

Antes he dicho que se conseguía «casi al 100%» por que hay un caso en el que no funciona. Si habéis leído los artículos de Jourmoly, y asimilado el comportamiento del ejemplo, veréis que si no se pasa controlador asume que es «index» y lo mismo pasa con la acción. De forma que si quisiésemos acceder a una acción del controlador «index» usando el .htaccess deberíamos escribir:

http://miaplicacion.com/index/nombre_de_la_accion/

Cuando lo ideal sería poder poner:

http://miaplicacion.com/nombre_de_la_accion/

De todas formas, si no usamos otra acción en el controlador «index» que no sea la acción «index», que se ejecuta por defecto, no tendremos ningún problema.

Como comentario final recordad que al usar un .htaccess que usa urls amigables debemos usar rutas absolutas al insertar imágenes, hojas de estilo o scripts de JavaScript. Para el navegador la ruta «cambia» 😉

Si algo no queda claro o me he dejado de explicar alguna cosa para eso están los comentarios. Preguntad lo que queráis.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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