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.

  1. 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.
  2. 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.
  3. Son fáciles de recordar.
  4. Son fáciles de escribir.
  5. 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.

  1. Primero tendrá que comprobar si el archivo .htaccess existe en la raíz de su sitio web.
  2. 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.
  3. 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
  • DIARIOS DE MI CIUDAD:

  • 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

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.

10 Comentarios »

 
  • Cocoli dice:

    Hola
    Buen dato !!
    Ya te incluyo en mis feeds

  • Vero dice:

    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?

  • Zarpele dice:

    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

  • Vero dice:

    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

  • yoppy dice:

    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(' ', '&amp;', '\r\n', '\n', '+');
        $url = str_replace ($find, '-', $url);
        // Eliminamos y Reemplazamos demás caracteres especiales
        $find = array('/[^a-z0-9\-]/', '/[\-]+/', '/]*&gt;/');
        $repl = array('', '-', '');
        $url = preg_replace ($find, $repl, $url);
        return $url;
    }
  • Zarpele dice:

    @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…

  • Zarpele dice:

    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

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

  • Gustavo dice:

    Perdon, donde puse tags, quise decir links… gracias.

 

Deja un comentario

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

 
Follow Me Hazte Fan Subscribe