miércoles, 1 de abril de 2015





Crear urls amigables con .htaccess y PHP

Muchos se preguntarán, ¿qué son las urls amigables y para qué sirven?¿realmente son necesarias?.
Pongamos un ejemplo práctico para ver la importancia que tienen las urls amigables dentro de un desarrollo web.
Si os fijais en un perfil de usuario de la popular red social Twitter, podéis ver que si mi usuario es “sombeo_oficial“, puedo acceder rápidamente a mi perfil desde la dirección “https://twitter.com/sombeo_oficial“. Eso amigos, es una url amigablealgo rápido y sencillo para acceder a un contenido de la página (en este caso al perfil del usuario) tanto para una persona como para un buscador.
Anteriormente, cuando surgió Facebook y se empezó a utilizar, los perfiles de los usuarios no disponían de urls amigables, por lo que para acceder a un perfil de usuario debíamos hacerlo a través de una url como esta “http://www.facebook.com/profile.php?id=1304880680“, algo que como podéis ver no es nada sencillo de recordar para una persona, ni tampoco muestra información muy concreta para un buscador.
Actualmente Facebook ya utiliza urls amigables y podemos ver que para acceder a un perfil de usuario ya símplemente con poner su nombre de usuario accedemos a él, sería algo así “http://www.facebook.com/sombeo” tanto para perfiles, como páginas, eventos, etc.
Para el posicionamiento de un sitio web es muy importante tener las direcciones o urls de forma amigable para los buscadores. Lo que incrementará considerablemente nuestro tráfico por parte de éstos. Ya que los buscadores además de fijarse en el título de la página, descripción, etcétera, también se fijan en la url y no es lo mismo tener una url amigable que diga “http://www.miweb.com/productos/monitor-17-pulgadas-samsung” a que sea “http://www.miweb.com/producto.php?id=2154“.
Ahora vamos con lo importante, deberemos crear un archivo de texto plano .htaccess en el directorio raíz con una estructura específica, para que nuestro servidor Apache sepa como interpretarlo.
  • La primera línea de este archivo debe ser la siguiente:
1
RewriteEngine on
  • Después ponemos las dos siguientes líneas:
1
2
RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 
Estas dos líneas son muy importantes, lo que hacen es decirle a Apache que sólo puede crear direcciones amigables si el directorio especificado no existe. Esto evita por ejemplo las reglas que coincidan con “http://miweb.com/imagenes/logo.png“. La primera línea evita los directorios (!-d) y la segunda línea los archivos (!-f).
  • Ahora vamos a reescribir una dirección para hacerla amigable.
Tenemos la siguiente dirección:
1
index.php?seccion=php&articulo=3
Podemos hacerla amigable y quedaría así:
1
articulo/php/3/urls-amigables-con-htaccess-y-php
Pues para poder crear está dirección amigable, a continuación de la última línea que tenga el archivo .htaccess deberemos poner una regla, en el caso de la dirección anterior sería ésta:
1
Rewriterule ^articulo/(.+)/([0-9]+)/(.+)$ index.php?seccion=$1&articulo=$2
Expliquemos un poco que significa cada cosa:
  • Rewriterule significa que vamos a crear una regla para reescribir una dirección.
  • El carácter ^ significa el comienzo de la expresión.
  • El primer valor (.+) significa que ahí va el primer valor/variable que pasamos por la urlcon el método GET. A estas variables se las llaman $1$2$3, dependiendo de su posición.
  • El valor ([0-9]) indica que ahí puede ir cualquier número del 0 al 9 pudiéndose repetir todas las veces que sean necesarias.
  • El segundo valor (.+) hace lo mismo que el primero pero con la última posición de la dirección.
  • El carácter $ significa que ahí termina la expresión.
Podemos hacer un infinidad de reglas distintas con diferentes patrones utilizando expresiones regulares.
Entonces cuando en el código de mi página web vaya a crear un enlace lo haría poniendo la url amigable directamente. Antes de todo ésto, cuando hagamos por ejemplo la consulta a la base de datos, mostraremos alguno de estos datos en la url para crear nuestra url amigable.

Fuente: http://blog.reaccionestudio.com/crear-urls-amigables-con-htaccess-y-php/

PHP: friendly url


Anteriormente había escrito sobre el funcionamiento de friendly url pero aún hay muchos que están en duda sobre su funcionamiento así que voy a aprovechar de hacer un ejemplo práctico muy sencillo sin usar web modular (que es para lo que normalmente sirve) para que sea lo más simple posible.

Lo básico en URL amigable

Lo primero debemos asegurarnos de tener activo el módulo mod_rewrite de lo contrario dará un error “Internal Server Error” o simplemente no funcionará, luego creamos un archivo .httacess
1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /micarpeta/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Allí primero verificamos el mod_rewrite luego seteamos la RewriteBase es decir la carpeta donde esta nuestro sitio, si se tratara de www.misitio.com esa línea sería:
1
RewriteBase /
Las 2 últimas líneas nos dicen que de existir ese archivo o carpeta se olvide de la URL amigable y use esos archivos

Creando pagina.html

Para esto en nuestro archivo.httacess añadimos:
1
RewriteRule (.*)\.html$ index.php?page=$1
Esto genera una equivalencia entre
index.php?page=mipagina
mipagina.html

Para emular carpetas

Para esto en nuestro archivo.httacess añadimos:
1
2
RewriteRule /local/(.*)/ index.php?page=local&link=$1
RewriteRule local/(.*) index.php?page=local&link=$1
Esto va a generar una equivalencia entre:
index.php?page=local&link=restaurante-san-jose
www.misitio.com/local/restaurante-san-jose/
La cantidad de parámetros y de nombres de las variables depende de cada caso en concreto

Uso de las variables

Todas las variables GET que creamos tanto con friendly URL como sin esta mantienen sus nombres por ejemplo en el caso:
index.php?page=local&link=restaurante-san-jose
www.misitio.com/local/restaurante-san-jose/
Las variables creadas en ambas direcciones son: page que tiene el valor local y la variable link que tiene el valor restaurante-san-jose
Debemos tener claro que con url amigable lo único que estamos haciendo es disfrazar la dirección pero este disfraz altera las rutas relativas por lo que posiblemente fallen todas las invocaciones a hojas de estilos, javascripts e imágenes que se hayan hecho sin usar una ruta absoluta, para remediar esto hay 2 posibles soluciones:

Alterando la ruta base(basepath)

Esta es la más simple y rápida basta con agregar la siguiente linea HTML en el encabezado de nuestra página web
1
<base href="http://www.misitio.com/" />

Usando un path absoluto

Esta es la solución que más se utiliza debido a que la otra solución puede no funcionar en algunos navegadores especialmente en los antiguos (IE6 por ejemplo tiene varios peros), lo que hacemos es guardar la ruta absoluta en una constante que luego usaremos cada vez que invoquemos una imagen, css o javascript.
1
2
3
define("_path", "http://misitio.com/");
// Para invocar una imagen por ejemplo
<img src="<?php echo _path; ?>miimagen.jpg" />
De esta forma hay algunas variantes usando short open tags, templates, funciones, etc pero la idea básica es la misma.

Fuente: http://www.miguelmanchego.com/2010/php-friendly-url-amigable/

No hay comentarios:

Publicar un comentario

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...