Url’s amigables con php y .htaccess
Esto es un mini tutorial para poder implementar url’s amigables con php y .htaccess de manera fácil y sencilla aplicable a cualquier ejemplo, si te sirvió o te gustó comenta que te pareció el aporte, bueno ahora el tuto…
A la hora de utilizar variables $_GET en php, como por ejemplo http://www.mipagina.com.ar/vernota.php?id=numero&title=titulo, nos damos cuenta que esta forma de acceder a nuestras paginas dinámicas traen una serie de inconvenientes.
Algunas ventajas
Aqui les dejo a mi entender las ventajas mas importantes de utilizar URL amigables de mayor a menor.
- Si bien Google nos informa que su robot Googlebot puede indexar hasta dos variables a través de la URL, esto no es muy recomendable según expertos en el área de posicionamiento SEO.
- Le mostramos información irrelevante y difícil de entender al usuario que usa la aplicación web, no es muy expresivo utilizar http://www.mipagina.com.ar/vernota.php?id=1552.
- Son fáciles de recordar.
- Son fáciles de escribir.
- Y varios mas pero los antes descriptos son los mas importantes…
Manos a la obra
- URL que tenemos: http://www.mipagina.com.ar/vernota.php?id=numero&title=titulo
- URL que queremos: http://www.mipagina.com.ar/vernota/numero/titulo.html
Lo primero que vamos a hacer es entrar en esta pagina que te ayuda a configurar tu .htaccess mod_rewrite generator un Wizard para crear reglas Rewrite.
Una vez que ingresamos en la pagina nos pedirá la URL que tenemos como lo describimos mas arriba, y solo clickear en Generated It

Ahora nos aparecera The original URL (que es la recien ingresada) y The rewritten URL(que es la nueva URL amigable).
- The original URL: http://www.mipagina.com.ar/vernota.php?id=numero&title=titulo
- The rewritten URL: http://www.mipagina.com.ar/numero/titulo.html.html
Ahora explicare brevemente las opciones que aparecen debajo de las URL.
Parameters
Seleccione los parámetros que deben estar presentes en la dirección URL reescrita. De forma predeterminada, sólo se incluyen los valores de los parámetros. Puede añadir el nombre y valor a la dirección URL reescrita o eliminar un parámetro por completo.

Aquí no tocamos nada (en este caso), ya que en nuestro ejemplo aparecen los dos parámetros a utilizar…
Prefix
Es una herramienta para mejorar la forma de la dirección URL reescrita y aumentando su relevancia.

Aquí ingresamos dentro de la casilla vernota/ , ya que tenemos que llegar a la forma enunciada mas arriba.
Delimiters
Seleccionamos los delimitadores de acuerdo a su gusto.

Aqui lo dejamos como esta, ya que nuestro delimitador es la barra / .
Suffix
Puede usar el sufijo para hacer cumplir la extensión al resto de su sitio. También puede incluir una o más palabras clave.

En este caso dejamos el .html, tambien le podemos poner .php, .htm, .asp, .cualquiercosa. Pero por lo que e probado .html lo indexa bien los buscadores y me quede con este.
Finalizando
Listo ya hemos creado nuestra regla de reescritura, podemos observar mas abajo de la pagina nos muestra las dos URL con los parámetros coloreados, para evitar malos entendidos.
- The original URL: http://www.mipagina.com.ar/vernota.php?id=numero&title=titulo
- The rewritten URL: http://www.mipagina.com.ar/vernota/numero/titulo.html
Ahora solo nos queda hacer click en Done y copiar el texto que aparece en el textarea y agregarlo a nuestro .htaccess.

Les dejo la traducción aquí…
La regla mod_rewrite para su sitio está hecha. Por favor, siga las siguientes instrucciones para instalarlo.
- Primero tendrá que comprobar si el archivo .htaccess existe en la raíz de su sitio web.
- Si el archivo. htaccess existe, puede descargarlo desde su sitio web, añada las siguientes líneas al final del archivo, y cargar el archivo modificado de nuevo a su sitio. Por favor, haga una copia del archivo original. htaccess. Así que si algo sale mal, puede restaurar el archivo original.
- Si el archivo .htaccess no existe, crear un nuevo archivo .htaccess y agregar las siguientes líneas a la misma. Luego subirlo a la raíz de su sitio web. Usted puede eliminar si algo va mal.
Añada las siguientes líneas de responsabilidad .htaccess:
RewriteEngine On RewriteRule ^vernota/([^/]*)/([^/]*)\.html$ /vernota.php?id=$1&title=$2 [L]
Listo
Y listo ya tiene la regla creada y si URL amigable funcionando.
También les dejo una función en PHP para utilizarla en la parte de title.
/* *@autor: Chuecko *@url: Zarpele.Com.Ar *Devuelve un valor String para utilizarlo como URL amigable. */ function urls_amigables($url) { // Transformamos todo a minúsculas $url = strtolower($url); //Reemplazamos caracteres especiales latinos $find = array('á', 'é', 'í', 'ó', 'ú', 'ñ'); $repl = array('a', 'e', 'i', 'o', 'u', 'n'); $url = str_replace ($find, $repl, $url); // Añadimos los guiones $find = array(' ', '&', '\r\n', '\n', '+'); $url = str_replace ($find, '-', $url); // Eliminamos y Reemplazamos demás caracteres especiales $find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/'); $repl = array('', '-', ''); $url = preg_replace ($find, $repl, $url); return $url; }
Paginas que no usan URL amigables
Estas paginas argentinas y del mundo no usan URL amigables, no se dan cuenta del potencial que estan perdiendo a la hora de Optimizacion SEO y en hacer una URL mas amigable al usuario…
- http://www.lanacion.com.ar/nota.asp?nota_id=1171498&pid=7258991&toi=6476
- http://diariocronica.com.ar/noticia.php?idnota=150498
- http://www.atp.com.ar/verpost.asp?ID=125600
- http://www.ucr.org.ar/nota.php?NOTAID=4139
- http://www.diario.com.mx/nota.php?notaid=a8207b909217cef5686a7849ae671568
- http://www.gacemail.com.ar/Detalle.asp?NotaID=10277
- http://www.enplenitud.com/nota.asp?notaid=10744
- http://www.latinspots.com/website/nota.php?notaid=13240
- http://www.catamarcaya.com/notas.php?id_nota=12610
- http://www.elheraldo.com.ar/ver_noticias.php?id_nota=34017
- http://www.diarioelsol.com/noticias.php?ed=13842&di=0&no=64946
- http://www.diariojunio.com.ar/noticias.php?ed=1&di=0&no=35278
- http://www.horadigital.com.ar/noticia.asp?id=13632
DIARIOS DE MI CIUDAD:
Entradas Relacionadas:
Saludos,
Si te sirvió deja un comentario…
Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.















Hola
Buen dato !!
Ya te incluyo en mis feeds
Bien… la regla funciona a la perfeccion
Pero no anda con function urls_amigables($url)
Si bien la funcion esta declarada, esta se aplica por una variable de session?
Creo que se me complico o me falto algo, como se aplica?
no, es una variable GET, depende de como la trates vos en tu script, depende de su utilización.
Yo no la uso (o no la trato), solo la uso para mostrar el contenido, ose que si alguien entra a esto
http://www.mipagina.com.ar/vernota/5/titulouno.html
http://www.mipagina.com.ar/vernota/5/titulodos.html
entrara a la nota 5 ya que el titulo sirve solo para mostrar.
Proba en las pagina que usan este sistema y usan algo semejante.
La idea de la funcion urls_amigables($url) es que vos le pases un titulo “ESto es Un tItulo – a” y te devuelva est-es-un-titulo-a” para poder ponerla como url.
Saludos Gracias por comentar
Ok entendido, pero em mi caso da lo mismo que este o no la funcion.
Levanto datos de una base desde una pagina, la paso por get a la otra y sale igual que antes. Si escribo la url amigable manualmente en la barra de direcciones, tambien sale.
La funcion esta en ambas paginas y el .htaccess corrige la receptora.
Esta bien? o solo la emisora lleva la funcion
Como se usa ese codigo?
function urls_amigables($url) { // Transformamos todo a minúsculas $url = strtolower($url); //Reemplazamos caracteres especiales latinos $find = array('á', 'é', 'í', 'ó', 'ú', 'ñ'); $repl = array('a', 'e', 'i', 'o', 'u', 'n'); $url = str_replace ($find, $repl, $url); // Añadimos los guiones $find = array(' ', '&', '\r\n', '\n', '+'); $url = str_replace ($find, '-', $url); // Eliminamos y Reemplazamos demás caracteres especiales $find = array('/[^a-z0-9\-]/', '/[\-]+/', '/]*>/'); $repl = array('', '-', ''); $url = preg_replace ($find, $repl, $url); return $url; }@yoppy
Suponiendo que levantas los datos de una base de datos, de las ultimas 2 notas de un usuario para listarlos en su perfil… (es lo mismo para mas)
De lo que obtenés
$id: 468
$titulo: Esto es el titulo de La noTa del usuario Z!
——–
$id: 555
$titulo: Otro titulo CopAdo deL Úsuario Zarpele…
Lo que hacemos con php es generar la parte del titulo, con la función dada, que pone todas las letras a minúsculas, reemplaza los acentos por sin acentos, etc… Para que esta sea acorde para poner en una url..
$titulo_return = urls_amigables($titulo);
‘http://www.mipagina.com.ar/vernota/’.$id.’/’.$titulo_return.’.html’
que nos devolvería…
http://www.mipagina.com.ar/vernota/468/esto-es-el-titulo-de-la-nota-del-usuario-z.html
http://www.mipagina.com.ar/vernota/555/otro-titulo-copado-del-usuario-zarpele.html
El scrip lo que hace es obtener el id con esta url y buscarlo, la parte del titulo es como “decorativa” por que aun cambiando esta parte podes acceder al post.
Según lo puesto con httaccess dice que lo que va después de vernota es mi id (id) y lo que va después de la barra que sigue es el titulo (title)
A la hora de acceder a ese link tengo como variable $_GET['id'] y $_GET['title'], y ahí hacemos lo que querremos con ese id, buscarlo en la base de datos para obtener el cuerpo, tags, categoria, etc.
Espero que te haya aclarado un poco…
Saludos…
No respondi a esto, la funcion debe estar en la pagina (script en php) donde quieras mostrar esta url, no en el script donde obtenes los datos de manera amigable gracias a httaccess…
Saludos..
Nice site ….)
Estimado, muy buen posteo… una sóla consulta me queda: desde el punto de vista código, los tags lo hago completos, como se verian normalmente en el path, o tengo que armarlos yo?
Ejemplo:
Si mi url es: /index.php?id=1
Quedaria asi: /id/1
En el código sigo armandolo asi: Link ??
o se arma diferente??
Gracias!
Perdon, donde puse tags, quise decir links… gracias.