URLs amigables con .htaccess y PHP

Las URLs amigables siempre ayudan al mejor posicionamiento en los motores de búsqueda de Internet, también para que los usuarios reconozcan fácilmente la URL actual, esta técnica ya la tienen implementada muchos websites, WordPress tambien la tiene implementada, pero para los que no usamos esta herramienta este tutorial les servira para crear URLs amigables.

Srinivas Tamada de 9lessons creo un tutorial con 2 tipos de URLs amigables basadas en Flickr y Twitter.

URL amigable estilo Flickr

Vemos que tiene 2 parámetros: “polvero” y “page2“, para lograr este resultado en nuestro website tendremos que agregar este código a nuestro .htaccess

//primer parámetro
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ users.php?user=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ users.php?user=$1

//segundo parámetro
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)$ users.php?user=$1&page=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([0-9]+)/$ users.php?user=$1&page=$2

URL Original

http://flickr.com/users.php?id=username&page=2

URL amigable

http://flickr.com/username/2

URL amigable estilo Twitter

viendo la imagen nos damos cuenta que no puede existir un usuario “login”, “home” ni “terms”, esto se logra mediante un filtro a la hora del registro con palabras reservadas, y al mostrarlo podemos combinar un poco de .htaccess y PHP para lograr el objetivo.

Código .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?key=$1

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1

Código PHP (index.php)

$key=$_GET['key'];

if($key=='home'){
    include('home.php'); // Home page
}else if($key=='login'){
    include('login.php'); // Login page
}else if($key=='terms'){
    include('terms.php'); // Terms page
}else{
    include('users.php'); // Users Gateway
}

También te puede interesar

6 Comments

  1. Dark
    dic 17, 2009 @ 12:14:14

    Muy buen post, siempre ofreciendo contenido útil y de calidad, como te dije hace unas semanas por Facebook.

    Saludos y felices fiestas! :)

  2. Alexander Garzon
    dic 17, 2009 @ 12:54:31

    Sólo aclarar que ES OBLIGATORIO, tener el mod_rewrite habilitado en el apache para que esto funcione.

  3. Miguel
    dic 17, 2009 @ 18:36:10

    Hay un problemamilla con las URL amigables y es lo siguiente:

    al cargar una seccion llamando la url ej. ” articulos/elecciones ” me lleva adecuadamante y pasa la variable a index.php, PERO las imagenes y archivos dentro de index no me cargan bien por toma la posicion de carpeta como ” articulos ” ej. tengo no me carga pero si coloco si carga pero no quiero usar esto… necesito que me carguen adecuandamente las imagenes y hojas de estilo si necesidad de reajustar las rutas.

    Espero puedas ayudarme con esto y gracias por tu colaboracion.

  4. craftyman
    dic 18, 2009 @ 08:45:12

    @Miguel, gracias por notar este error, para solucionar este problema solo bastara con poner estas lineas faltantes en el .htaccess

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?key=$1

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1

    Esto reconocera las carpetas y archivos para mostralas adecuadamente.

    Saludos

  5. Pixeels
    ene 17, 2010 @ 16:13:18

    Hola,

    estoy buscando la solución para algo similar pero sin éxito, he probado de varias formas pero me da error y no muestra la página,

    quiero cambiar esto http://url/usuarios?user=pepito por

    http://url/usuarios/pepito

    y mi htacces esta de esta forma

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    RewriteRule ^([a-zA-Z0-9_-]+)/$ usuarios?user=$1

    pero cuando pongo la url me da error, ¿me puedes ayudar?, gracias.

  6. diseño web medellin
    ene 12, 2011 @ 18:43:30

    hola, como podria cambiar una url que llame contendo.php por flores-medellin.php si es que se puede.

    gracias