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:
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.
Etiquetas en Technorati: apache, artículos, php, programación, rewrite engine, seo, webmasterEntradas Relacionadas:


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.
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.
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
)