« Optimización del rendimiento de ADOdb en PHP Un error handler que lance exceptions en PHP »
Ene 11

Hoy en día uno de los factores a tener en cuenta cuando nos ponemos a desarrollar una aplicación PHP son que forma tendrán las URLs de nuestro futuro site. Unas URLs limpias y amigables son más fácilmente indexadas por los buscadores al mismo tiempo que son más fáciles de recordar y entender para el usuario de la web.

Como URL limpia y amigable entendemos una dirección sin parámetros por GET como por ejemplo:

http://www.phpbsd.net/bienvenida/

en lugar de la "sucia", difícil de recordar e indexar:

http://www.phpbsd.net/?page_id=5

[1] Lo primero es configurar correctamente el apache con un .htacces como:

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

Estas reglas son ya un clásico usado por muchas de las aplicaciones PHP que corren por ahí (como el wordpress de este blog). Indican que cualquier petición se envíe siempre al index.php.

[2] Ahora sólo falta tratar las URLs que recibimos desde PHP. Una manera muy sencilla es con una función como:

function get_url() {
  $parametros = array();
  $url = parse_url($_SERVER['REQUEST_URI']);
  foreach(explode("/", $url['path']) as $p)
    if ($p!='') $parametros[] = $p;
  return $parametros;
}

Esta función devuelve un array con todos los parámetros separados por "/" pasados a la URL. Con esto ya podemos procesar la petición, sólo tenemos que consultar en este array para saber que nos piden.

Por ejemplo con la URL:

http://www.phpbsd.net/2006/12/06/optimizacion-del-rendimiento-de-adodb-en-php/

si ejecutamos un print_r(get_url()) obtenemos:

Array (
[0] => 2006
[1] => 12
[2] => 06
[3] => optimizacion-del-rendimiento-de-adodb-en-php
)

Para más información podéis consultar la documentación de la función parse_url y del módulo de apache mod_rewrite.

  • Facebook
  • Twitter
  • del.icio.us
  • Bitacoras.com
  • Meneame
Entradas relacionadas:
Etiquetas:

4 Comentarios sobre “URLs limpias y amigables con PHP y Apache”

  1. Alex dice:

    Yo tengo una duda, entendi perfectamente lo expuesto arriba, pero imaginemos que tenemos un sistema de noticias, como reconoceria que noticia es apartir de la variable pasada del tipo “optimizacion-del-rendimiento-de-adodb-en-php”? en la db se le dedicaria una celda con el titulo de la noticia pero optimizado? o se encriptaria en md5 la variable para comparar con otros md5 de la db?

    Saludos.

  2. Oriol dice:

    Pues hay varias maneras (como siempre) pero yo normalmente dedico un campo en BD con el nombre ya “transformado” para montar la URL y sobre ese campo creas un índice. Con un simple SELECT puedes obtener el ID de la noticia deseada o también puedes obtener directamente todo el contenido de la noticia.

  3. Miguel Sosa dice:

    prefiero URLs un poco mas largas pero mas faciles de programar, copie algo el concepto de mod_sef de joomla

    http://www.algo.com/decora/decora/var1,valor1/var2,valor2/algo,4/decora.html

    en http://www.noticiasenlinea.com.mx lo e puesto en marcha y en muchos sitios mas teniendo buena respuesta ante google

    Array (
    [var1] => ‘valor1′
    [var2] => ‘valor2′
    [algo] => 4
    )

  4. gerardo dice:

    una duda digamos
    que genero este htaccess
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    la regla que ponga digamos
    RewriteRule ^articulo/([a-z_-]+)/([0-9]+)/?$ articulos.php?seccion=$1&id=$2 [NC,L]

    si se ejecutara osea la regla de RewriteRule . /index.php [L]
    no debera hacerme ningun ruido??

Escribe un comentario

preload preload preload