Foros del Web » Estrategias Digitales y Negocios Online » SEO »

URL amigable

Estas en el tema de URL amigable en el foro de SEO en Foros del Web. Hola a todos Estoy tratando de reescribir mis urls de manera que sean mas faciles de recordar y por supuesto mejor indexadas en google. La ...
  #1 (permalink)  
Antiguo 27/03/2006, 14:16
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 23 años, 3 meses
Puntos: 0
URL amigable

Hola a todos

Estoy tratando de reescribir mis urls de manera que sean mas faciles de recordar y por supuesto mejor indexadas en google.

La verdad es que no tengo ni idea de como hacerlo, lo que estoy buscando es lo siguiente:
Que las url de esta manera: www.dominio.com/tema.php?id=123
Pasen a ser: www.dominio.com/el-tema-en-cuestion-123.html

No se si me he explicado bien, les agradeceria alguna ayuda, manual o referencia...

Muchas gracias,
  #2 (permalink)  
Antiguo 27/03/2006, 14:23
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Hola daniph.

Esto lo puedes hacer usando el mod Rewrite de Apache.

Puedes, o editar el httpd.conf del Apache, o lo que es mas cómodo, usar el fichero .htaccess.

Por ejemplo, para cambiar www.dominio.com/tema.php?id=123 por www.dominio.com/tema/titulo-del-tema, el .htaccess sería algo así:

Código:
RewriteEngine on
RewriteRule ^tema/(.+)/?$ tema.php?id=$1 [QSA]
Deberías saber algo de expresiones regulares para hacer esto.

De cualquier forma, en zonaphp tienen un buen artículo.
  #3 (permalink)  
Antiguo 27/03/2006, 14:50
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 23 años, 3 meses
Puntos: 0
Gracias Bonez

Pero una cuestion, la variable que se pasa por get, es el titulo del tema o el id del tema en cuestion?

Yo tengo algo parecido:
RewriteEngine on
Rewriterule ^(.*)-([0-9].+)\.html$ anuncio.php?ref=$1

Gracias de nuevo
  #4 (permalink)  
Antiguo 27/03/2006, 14:54
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Hombre, puedes pasar lo que quieras.

Yo suelo pasar el título, ya que es mas fácil de recordar, mas claro y además, para los buscadores es mejor también, ya que las palabras clave están, o deberían, en la URL.
  #5 (permalink)  
Antiguo 27/03/2006, 14:57
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 23 años, 3 meses
Puntos: 0
Disculpa no me he explicado bien

Me referia si deberia pasar "anuncio.php?id=vendo-casa-en-madrid" o "anuncio.php?id=1324"

Gracias
  #6 (permalink)  
Antiguo 27/03/2006, 15:02
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Pues, no te entiendo.
Debes pasar, lo que vas a usar, ¿no?
  #7 (permalink)  
Antiguo 27/03/2006, 15:06
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 23 años, 3 meses
Puntos: 0
Es que ese es el problema...

La unica variable que paso en get, es el id del anuncio en cuestion.

Para crear los enlaces, utilizo una funcion que elimina los caracteres "extraños" del titulo del anuncio y luego construyo la url, de esta manera:

$url_anuncio = urls_amigables($row[titulo])."-".$row["idanuncio"].".html";

Y el .htacces del que dispongo es el que te puse en el post anterior...

Como lo ves?
  #8 (permalink)  
Antiguo 27/03/2006, 15:20
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 23 años, 3 meses
Puntos: 0
Bonez, echa un vistazo a este articulo:

http://www.baluart.net/articulo/403/...es-con-php.php

Aqui pasa dos variables, una el id y otra con el titulo, mi intencion es solo pasar una variable, el id.

Gracias
  #9 (permalink)  
Antiguo 27/03/2006, 15:34
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Bueno, para pasar solo una variable en tu caso, sería algo así.
Código:
RewriteEngine on
Rewriterule ^(.*)-([0-9].+)\.html$ anuncio.php?ref=$2
Así con $_GET['ref'] solo recoges el número que hace de ID. $1, $2, $3, etc, son siempre la regla que usas, en orden. $1 devolvería el título, y $2 el ID.
  #10 (permalink)  
Antiguo 27/03/2006, 15:36
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 23 años, 3 meses
Puntos: 0
Oooohhh!!! ahora si...

Muchisimas gracias Bonez
  #11 (permalink)  
Antiguo 27/03/2006, 16:51
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
pues yo tengo un pequeño problema con la direcciones estaticas que se generan en mis foros...

las letras con caracteres especiales o acentos las elimina y por ejeplo si tengo un hilo llamado

masterizar una canción con ableton live

la deja asi:

masterizar-una-cancin-con-ableton-live-v232.html

he estado mirando lo de str replace o preg replace... pero no lo he conseguido.
  #12 (permalink)  
Antiguo 27/03/2006, 16:55
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 23 años, 3 meses
Puntos: 0
Echa un vistazo a la funcion que aparece en esta direccion

http://www.baluart.net/articulo/403/...es-con-php.php

Saludos,
  #13 (permalink)  
Antiguo 27/03/2006, 16:56
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Yo me hice una función que reemplazaba tildes, diéresis, eñes, y par de cosas mas...
Lo uso en una página para crear la "clave" de títulos para URL (por ejemplo en noticias o foros como es tu caso).
Es en PHP, no sé si te servirá, pero te la dejo por aquí.

Código PHP:
<?php
function reemplazo ($temp) {
$temp=strtolower($temp);
$b=array("á","é","í","ó","ú","ä","ë","ï","ö","ü","à","è","ì","ò","ù","ñ"," ",",",".",";",":","¡","!","¿","?",'"');
$c=array("a","e","i","o","u","a","e","i","o","u","a","e","i","o","u","n","-","","","","","","","","",'');
$temp=str_replace($b,$c,$temp);
return 
$temp;
}
echo 
reemplazo("masterizar una canción con ableton live");
// Imprime: masterizar-una-cancion-con-ableton-live

echo reemplazo("Además, ¡se puede incluso reemplazar una pregunta! ¿ves?");
// Imprime: ademas-se-puede-incluso-reemplazar-una-pregunta-ves
?>
  #14 (permalink)  
Antiguo 27/03/2006, 17:53
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
vamos a ver yo tengo esta función para transformar las direcciones dinamicas en estaticas amigables, en php por supuesto.

es esta:
Código PHP:
<?php function make_url_friendly($url

  
$url strtolower($url); 
  
$find = array(' '
                
'&'
                
'\r\n'
                
'\n'
                
'+'); 
  
$url str_replace ($find'-'$url); 
  
$find = array('/[^a-z0-9\-<>]/'
                
'/[\-]+/'
                
'/<[^>]*>/'); 
  
$repl = array(''
                
'-'
                
''); 
  
$url =  preg_replace ($find$repl$url); 
  return 
$url

function 
rewrite_urls($content

  function 
if_query($amp
  { 
    if(
$amp != ''
    { 
      return 
'?'
    } 
  } 
  
$url_in = array('/(?<!\/)viewforum.php\?f=([0-9]+)((&)|(&)){0,1}([^>]+>)(.*?)<\/a>/e'
                  
'/(?<!\/)viewtopic.php\?t=([0-9]+)((&)|(&)){0,1}([^>]+>)(.*?)<\/a>/e'); 
  
$url_out = array("make_url_friendly('\\6') . '-vf\\1.php' . if_query('\\2') . stripslashes('\\5\\6') . '</a>'"
                   
"make_url_friendly('\\6') . '-vt\\1.php' . if_query('\\2') . stripslashes('\\5\\6') . '</a>'"); 
  
$content preg_replace($url_in$url_out$content); 
  return 
$content
?>
mmmm esto se complementa con unas sentencias en el htacces para el modrewrite....

como hay varios str_replace ya usados.... añado esas sentencias al str_replace en los arrays de abajo?? como iria el orden sin alterar la funcionalidad

me pierdo un poco con este tema.
  #15 (permalink)  
Antiguo 28/03/2006, 20:35
Avatar de TierradeTrucos  
Fecha de Ingreso: marzo-2006
Mensajes: 20
Antigüedad: 18 años, 7 meses
Puntos: 0
Aqui tienes una buena nota que te puede servir donde resume todo, tanto para Windows como para LINUX.

seontop.com/content/view/21/34/

Suerte
  #16 (permalink)  
Antiguo 29/03/2006, 01:34
Avatar de troglod  
Fecha de Ingreso: abril-2005
Ubicación: elche
Mensajes: 362
Antigüedad: 19 años, 6 meses
Puntos: 0
muy bueno ese manual ;)
  #17 (permalink)  
Antiguo 07/04/2006, 13:52
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 20 años, 5 meses
Puntos: 2
Yo uso esta función y cumple perfectamente con su cometido:
Código PHP:
function getRewriteString($sString) {
     
$string strtolower(htmlentities($sString));
     
$string preg_replace("/&(.)(uml);/""$1e"$string);
     
$string preg_replace("/&(.)(acute|cedil|circ|ring|tilde|uml);/""$1"$string);
     
$string preg_replace("/([^a-z0-9]+)/""-"html_entity_decode($string));
     
$string trim($string"-");
     return 
$string;
  } 
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #18 (permalink)  
Antiguo 16/05/2006, 08:27
Avatar de troglod  
Fecha de Ingreso: abril-2005
Ubicación: elche
Mensajes: 362
Antigüedad: 19 años, 6 meses
Puntos: 0
Muchas gracias por la ayuda, consigo generar el titulo en la url ahora me surge otro problema el script que reemplaza los espacios por guiones y los acentos no me funciona, no se exactamente que poner, lo genero de la siguiente forma:

<a href="<? echo $x['Titulo']; ?>-<? echo $x['Num_Noticia'] ?>.html" target="_self "><? echo $x['Titulo']; ?>

ahora me gustaría saber como ponerlo para que modifique los espacios por guiones y acentos etc.. Gracias
  #19 (permalink)  
Antiguo 05/06/2006, 19:24
 
Fecha de Ingreso: diciembre-2004
Mensajes: 721
Antigüedad: 19 años, 10 meses
Puntos: 2
Hola que tal? Esta muy interesante este thread.

Se me ocurren dos preguntas:

1) ¿que pasa cuando la cantidad de variables en una URL es variable?

En mi foro tengo algo asi:

.../foros/leer.php?post_id=1234&pag=2

El tema es que no siempre se usa la variable $pag, ya que por defecto un post tiene solo una página y cuando se cargan foros de solo una página se lo hace sin dicha variable.

¿tengo que crear dos reglas? ¿puedo hacer todo con una misma regla?


2) Respecto a google... es realmente UTIL pasar el "titulo" del thread por la url ? osea, si lo hago google me puede indexar diferentes threads para que salgan en busquedas de google? Esto lo voy a querer hacer igualmente en el futuro, si esta es la mejor forma, no me importaria reformular los links del foro.

Bueno muchas gracias, un saludo.
  #20 (permalink)  
Antiguo 04/07/2006, 12:38
 
Fecha de Ingreso: octubre-2004
Mensajes: 114
Antigüedad: 20 años
Puntos: 0
Checate esto.. a lo mejor te sirve.
http://www.webconfs.com/url-rewriting-tool.php
  #21 (permalink)  
Antiguo 14/07/2007, 01:27
Avatar de hawaiian050  
Fecha de Ingreso: junio-2007
Mensajes: 285
Antigüedad: 17 años, 5 meses
Puntos: 2
reemplazar espacios con guiones y no me ba la url ? sabrian desirme por que?

$cadena = str_replace(" ","-", $galeria[titulo] );

<a href="<? echo "$categoria[nombre]"; ?>/<? echo $cadena; ?>.html"



y el de la categoria lo dejo asi de ejemp orijinal.

Tal ves flata algo en el .htaccesss ?


.htaccesss

RewriteEngine on
RewriteRule ^(.*)\/(.*)\.html$ galeria.php?categoria=$1&galeria=$2 [L]
RewriteRule ^(.*)\.html$ index2.php?categoria=$1 [L]




la url sale asi pero no va: http://www.dominio.com/categoria/galeria-titulo.html
y la de las categorias sale asi y no ba : http://www.dominio.com/categoria.html

con los replaces de guiones no me ba no funciona no se por qe pero sin ello si perfectamente pero queda no amigable para google .

por fabor le agradeseria pila a quien me responda hace meces estoy trancado con esto y no se como es gracias.
  #22 (permalink)  
Antiguo 02/06/2008, 19:53
 
Fecha de Ingreso: junio-2008
Mensajes: 2
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Respuesta: URL amigable

Yo no he podido hacer funcionar el mio.
Solo me funciona el primer rewrite, los demás parece ignorarlos.

¿Alguna idea o sugerencia para hacermelo más fácil? No entiendo por que falle, ya he intentado varios tipos de codificaciones para el htaccess.


Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Language
Rewriterule ^$ index.php
RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?lg=$1 [L]
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?lg=$1&st=$2 [L]
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?lg=$1&st=$2&cg=$3 [L]
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?lg=$1&st=$2&cg=$3&tt=$4 [L]
  #23 (permalink)  
Antiguo 07/06/2008, 07:04
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Respuesta: URL amigable

ZSeven, pon las reglas justo al revés, primero la última, y así hasta llegar a la primera que se hará la última.
  #24 (permalink)  
Antiguo 21/05/2009, 11:29
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: URL amigable

hola gente de fdw

estoy intentando entender como es que muchos sitios tienen una url tal como:

http://www.thinkingheads.com/confere...ankaj-ghemawat

lo que me pregunto es:
¿como buscan ese registro en la base de datos?, ¿por medio del nombre? o tendrán en un array todos los pares id=>nombre, de cada registro y luego comprobarán si el nombre coincide con alguno de los del array

en mi caso yo lo tengo hecho de la siguiente manera:

http://www.midominio.com/registro/23

pero resulta que es mejor el ejemplo 1 que pone el nombre completo

desde ya muchas gracias.
  #25 (permalink)  
Antiguo 21/05/2009, 21:27
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 20 años, 7 meses
Puntos: 78
Respuesta: URL amigable

Lo que haces es cuando guardas cada artículo, generar un permalink que no exista y luego buscas por ese permalink, por ejemplo, si el titulo es:

Url amigable

el permalink bien podría ser:

url-amigable

y si existe (esto debes controlarlo), puede ser:

url-amigable1, 2, 3, etc


o bien incluir el id en el nombre, ejemplo:

url-amigable-381489 como sucede en este mismo foro ;)

luego buscas ese permalink en tu base, y no el ID en sí. O bien su usaste el ID y sabes que esta a lo último separado por un - lo separas y buscas el ID

Es sencillo, cuestión de darse mañana y dejar de pensar que solo se pueden recibir parámetros por POST y GET
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #26 (permalink)  
Antiguo 21/06/2009, 01:25
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 21 años, 4 meses
Puntos: 21
Pregunta Respuesta: URL amigable

ahh orale entonces ,digamos que genero el registro del articulo con sus titulo y otro con el permalink o url amigable

entonces lo debemos buscar algo asi

Código:
//tengo que ver si este articulo tiene nombre 
$ssql = "select * from articulo where permalink = $permalink "; 
$rs = mysql_query($ssql); 
if (mysql_num_rows($rs)==0){ 
//es que no existe un articulo con ese nombre 
echo “Error. No tenemos ese artículo”; 
}
__________________
gerardo
  #27 (permalink)  
Antiguo 21/06/2009, 01:32
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 21 años, 4 meses
Puntos: 21
Pregunta Respuesta: URL amigable

no sabia que hay que ordenar las reglas

es decir si tengo asi mi htacces
Código:
RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?lg=$1 [L]
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?lg=$1&st=$2 [L]
hay que ponerlo asi
Código:
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?lg=$1&st=$2 [L]
RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?lg=$1 [L]
podrian explicarlo o dar una documentación sobre ese detalle
saludos amigos

Cita:
Iniciado por ZSeven Ver Mensaje
Yo no he podido hacer funcionar el mio.
Solo me funciona el primer rewrite, los demás parece ignorarlos.

¿Alguna idea o sugerencia para hacermelo más fácil? No entiendo por que falle, ya he intentado varios tipos de codificaciones para el htaccess.


Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# Language
Rewriterule ^$ index.php
RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?lg=$1 [L]
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?lg=$1&st=$2 [L]
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?lg=$1&st=$2&cg=$3 [L]
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)/?$ index.php?lg=$1&st=$2&cg=$3&tt=$4 [L]
__________________
gerardo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:38.