Volver a la portada del blog

Urls amigables sin extensión y front controller

13 Junio, 2006 por Carlos

Muy resumido, y seguramente mal explicado, un front controler aplicado a la web consiste en usar una página (en mi caso index.php) para gestionar todas las peticiones y mostrar el resultado en base a ellas.

Por ejemplo, yo lo he usado para mostrar las diferentes secciones de la página web de neurotic. Al index.php le paso como parámetro la sección (index.php?seccion=programacion-web) y este se encarga de mostrarla. En mi caso he usado smarty para gestionar las plantillas pero ahora usaré simplemente un include de php para no complicar más las cosas.

A continuación pongo un ejemplo de código:

// Cargamos el archivo que nos pasan via $_GET
switch($_GET["seccion"])
{
case “home”: $seccion = “home”;break;

case “neurotic”: $seccion = “neurotic”;break;

case “diseno-web”: $seccion = “disenyo”; break;

case “programacion-web”: $seccion = “programacion”; break;

case “equipo-de-neurotic”: $seccion = “equipo”; break;

case “trabajos-diseno-web”: $seccion = “trabajos”; break;

case “proyectos-web-propios”: $seccion = “propios”; break;

default: $seccion = “home”;
}

include(“templates/$seccion/index.tpl”);

Puede parecer algo redundante el switch y se podría pensar que sería más fácil hacer un include del parámetro que nos pasan pero una regla de oro es no confiar en los parámetros (para evitar ataques de usuarios malintencionados). Con el switch nos aseguramos que $seccion tendrá sólo unos valores determinados.

Ahora ya tenemos con un sólo fichero php las secciones que queramos pero las url son bastante feas: ni amigables para los usuarios ni para los buscadores. Para lograrlo tan sólo hemos de incluir el siguiente código en nuestro .htaccess:

<ifmodule mod_rewrite.c>
RewriteEngine on
Options +FollowSymlinks

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?seccion=$1 [L,QSA]
</ifmodule>

Ahora los links en lugar de ser del tipo www.neuroticweb.com/index.php?seccion=neurotic pueden ser simplemente www.neuroticweb.com/neurotic (para que funcione esto index.php debe ser el archivo por defecto primario)

Y eso es todo, ahora sólo faltaría complicarlo un poco más introduciendo varios idiomas.


Fatal error: Call to undefined function menea() in /data/virtual/neuroticweb.com/blog/wp-content/themes/neurotic/single.php on line 39