Foros del Web » Programando para Internet » PHP »

A vueltas con la optimización de urls

Estas en el tema de A vueltas con la optimización de urls en el foro de PHP en Foros del Web. Hola, después de leer este gran artículo de zona php --> http://zonaphp.com/articulo30.php , decidí hacerlo pero no hay manera humana de que me funcione. He ...
  #1 (permalink)  
Antiguo 05/10/2005, 03:50
Avatar de Jandroide  
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 1 mes
Puntos: 1
A vueltas con la optimización de urls

Hola,
después de leer este gran artículo de zona php --> http://zonaphp.com/articulo30.php, decidí hacerlo pero no hay manera humana de que me funcione. He buscado otros tutoriales y tampoco, cada vez me falla algo. También he buscado infinidad de mensajes en este foro y, sin darme solución, he comprobado que hay mucha gente que anda bastante perdida con este asunto. Así que voy a mostraros por pasos lo que hago, a ver si así se puede orientar a los que tampoco les salga.

1) Compruebo en el httpd.conf que está activado
Código PHP:
LoadModule rewrite_module modules/mod_rewrite.so 
2) Utilizo Appserv bajo WINDOWS, así que he escogido el primer método del artículo porque el siguiente pone que no funciona en W. Dentro del directorio www he creado otro llamado articulo y ahí he creado el .htaccess:
Código PHP:
#Activamos el mod_rewrite
RewriteEngine on
#Le indicamos como re-escribir la URL
#En este caso lo que hacemos es indicarle que las expresiones entre paréntesis corresponden al id y página respectivamente.
RewriteRule /articulo/(.+)/(.+) /articulo.php?id=$1&pagina=$
3) He creado en archivo articulo.php donde he puesto tres echos para mostrar las variables $id, $_GET['id'] y $url[2], para ver si funciona alguna. Según el artículo ya debería funcionar pero no sé.....Ahora escribo en el navegador cosas como http://localhost/articulo/articulo/2/5 pero no veo nada significativo. También he probado a subir el .htaccess al directorio www, pero nada.

Perdón por la parrafada, pero como soy algo torpe prefiero exponerlo todo paso a paso. Gracias
  #2 (permalink)  
Antiguo 06/10/2005, 02:47
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 21 años, 11 meses
Puntos: 0
estimado usuario... estoy aprendiendo tambien como usar RewiteEngine... y bien no entendi tu caso.. dices que no ves nada significativo... te refieres a que la pagina luego no te aparece? o bien no te cargan las fotos...? por que segun veo la regla esta super bien... el problema es que si tienes graficos... estos no existen en el directorio articulo/2/5 .... por lo que deberias de colocar al archivo articulo.php lo ../../ antes de las imagines y demas...

Ahora bien veo que la direccion deberia ser localhost/articulo/2/5 ... mas no como le colocas con doble articulo/articulo...

Ahora bien, a mi me paso que al colocar RewriteRule /articulo/* , es decir con el / al inicio de la regla... eso en mi caso hizo que tengo que escribir la url como localhost//articulos....* .... me explico? con el doble //....

bueno espero te sea de referencia.... como te digo no soy etendido en el tema... recien etoy consultando.. :D
  #3 (permalink)  
Antiguo 06/10/2005, 03:47
Avatar de Jandroide  
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 1 mes
Puntos: 1
Gracias por responder GuitarMan.

Lo de colocar localhost/articulo/articulo/2/5 es porque el archivo es articulo.php y está colocado dentro de la carpeta también llamada articulo.

La página sí me carga, aunque creo que eso es lo normal, incluso si no hubiera ningún .htaccess. Lo que ocurre es que pruebo en esa página a recoger las variables y mostrarlas pero nada, no muestra nada. También he incluido un enlace de prueba que vaya a articulo.php?id=123&pagina=5 y se supone que si todo esto funcionara, cuando voy a la página debería cambiarlo automáticamente por algo como articulo/123/5, pero me lo deja igual.

Les recuerdo que lo estoy haciendo en windows, no sé si eso supone algún especial problema.
  #4 (permalink)  
Antiguo 06/10/2005, 03:50
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 21 años, 11 meses
Puntos: 0
talvez no te funciano por ello.. no te puedo indicar pero almenos en mi webserver local no lo he probado... :( trata subiendo los archivos a un hosting.

Suerte
  #5 (permalink)  
Antiguo 06/10/2005, 04:20
Avatar de Jandroide  
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 1 mes
Puntos: 1
Muchas gracias!
Subí todo al server, y funciona metiendo articulo.php y capturar.php dentro del public_html y el .htaccess por encima, es decir, al lado de public_html.
Ahora me recoge las variables por $_GET, pero aun falla una cosa serio: :

A ver, estamos en http://www.midominio.com/articulo/12/2, y en articulo.php he colocado los siguientes enlaces para probar:
http://www.midominio.com/articulo.php?id=123&pagina=5 y
articulo.php?id=123&pagina=5
...pero no me los reescribe por articulo/123/5 ni nada parecido. De esto también se debería encargar el RewriteRule, ¿no? ¿O esto lo tengo que programar yo aparte?
  #6 (permalink)  
Antiguo 06/10/2005, 04:28
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 21 años, 11 meses
Puntos: 0
la verdad yo no he usado el archivo capture ni nada de ello... basta con que se haga unicamente con la regla

RewriteRule articulo/(.+)/(.+) articulo.php?id=$1&pagina=$2

y listo ... pruebalo... sin lo de capture ni nada.... si no tienes muchas visitar no causa un overhead de preocupacion...
saludos!
  #7 (permalink)  
Antiguo 06/10/2005, 04:54
Avatar de Jandroide  
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 1 mes
Puntos: 1
Buff...nada. Con la regla que me dices ni siquiera entra en la página y con la que puse yo, entra pero lo de los enlaces sigue sin funcionar, y los he puesto de mil formas. Además he probado en dos servidores distintos así que supongo que será algo que hago yo mal.
  #8 (permalink)  
Antiguo 06/10/2005, 05:03
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 21 años, 11 meses
Puntos: 0
sorry, olvide mencionar... agrega antes de la regla lo siguiente

RewriteBase /

en caso de que el archivo este en el directorio raiz...

Saludos!
  #9 (permalink)  
Antiguo 06/10/2005, 05:22
Avatar de Jandroide  
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 1 mes
Puntos: 1
Muchas gracias GuitarMan pero parece que va a ser imposible que me funcione algún día!
Si pongo esto:
Código PHP:
RewriteEngine on
RewriteBase 
/
RewriteRule /articulo/(.+)/(.+) /articulo.php?id=$1&pagina=$
no pasa nada, sigue todo igual, y si lo pongo así:
Código PHP:
RewriteEngine on
RewriteBase 
RewriteRule /articulo/(.+)/(.+) /articulo.php?id=$1&pagina=$
entonces me sale un error...
Código PHP:
Internal Server Error
The server encountered an internal error 
or misconfiguration and was unable to complete your request.
(...)
Additionallya 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request
Los enlaces de prueba que utilizo son:
- articulo.php?id=123&pagina=5
- /articulo.php?id=123&pagina=5
- www.midominio.com/articulo.php?id=123&pagina=5
  #10 (permalink)  
Antiguo 06/10/2005, 05:56
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 21 años, 11 meses
Puntos: 0
prueba usando

Cita:
RewriteEngine on
RewriteBase /
RewriteRule articulo/(.+)/(.+) articulo.php?id=$1&pagina=$2
y luego ve a www.tudominio.com/articulo/123/5 y debe de funcionar... :( ... fijate que el el codigo que te pongo no inicia con los /... pero para que funcione, la pagina www.tudominio.com/articulo.php?id=123&pagina=5 deb de funcionar perfectamente... por que se supone que www.midominio.com/articulo.php?id=123&pagina=5 esta correcta...

trato de ayudarte en lo que puedo.. como te mensione... no soy entendido en el tema... recien estoy aprendiendo y tambien tengo un problema como el tuyo... puedo hacer todo eso que dices... pero no puedo hacer www.mipagina.com/miuser que reemplace por www.mipagina.com/usuario.php?user=miuser :( no se por que pero cuando trato de hacer algo asi da error 500... lo que tu suguieres si lo he logrado con el codigo que te coloque... pero no lo he probado en windows.. si no en mi hosting en linux...

Salud!
  #11 (permalink)  
Antiguo 06/10/2005, 06:24
 
Fecha de Ingreso: junio-2004
Mensajes: 158
Antigüedad: 19 años, 9 meses
Puntos: 1
guitarman lo has resuelto???
mira he leido el articulo
pregunta has probado esto?

#Activamos el mod_rewrite
RewriteEngine on
#Le indicamos como re-escribir la URL
RewriteRule /(.+) /usuario.php?user=$1

esto tendria que funcionar
saludos
Javier
  #12 (permalink)  
Antiguo 06/10/2005, 06:39
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 21 años, 11 meses
Puntos: 0
que tal Jadi, gracias por tu respuesta, te comento... lo que Jandroide quiere hacer lo he logrado.... PERO lo que tu me indicas.... no funciona :(

colocando RewriteRule /(.+) /usuario.php?user=$1 y luego voy a www.mipagina.com/miusuario me da un error 404...

PERO si con la misma regla escribo en mi navegador www.mipagina.com//miusuario me funciona... es decir.. colocando //.... y si le suprimo los / me da error 404...

estas son algunas de las alternativas que e tratado y los errores que me han dado:

+ RewriteRule (.+) usuario.php?user=$1 | Error del MySQL debido a que la variable no es capturada...
+ RewriteRule ^(.+) usuario.php?user=$1 | Error del MySQL debido a que la variable no es capturada...
+ RewriteRule /(.+) usuario.php?user=$1 | Me funciona pero queda asi... www.midominio.com//guitarman ... ven el doble //?... lo cual no deja mostrar las imagenes ni demas... :(
+ RewriteRule /(.+) /usuario.php?user=$1 | me da un error 404 :(
+ RewriteRule .+ usuario.php?user=$1 | Error del MySQL debido a que la variable no es capturada...
+ RewriteRule [.+] usuario.php?user=$1 | Error del MySQL debido a que la variable no es capturada...

alguna idea para poder hacer mipagina.com/miuser y que vaya a mipagina.com/usuario.php?user=miuer ?

saludos y gracias por responder
  #13 (permalink)  
Antiguo 06/10/2005, 07:34
Avatar de Jandroide  
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 1 mes
Puntos: 1
Nada, no hay manera. Utilizo esto:

RewriteEngine on
RewriteBase /
RewriteRule articulo/(.+)/(.+) articulo.php?id=$1&pagina=$2

tal como me dijiste. Así, si pongo en el navegador algo como http://www.mipagina.com/articulo/12/1258, sí que me sale la página incluso -lo mejor de todo- es que sin ayuda de ningún otro script me recoge las variables perfectamente. El problema es cuando pongo algún enlace del tipo
<a href="http://www.mipagina.com/articulo.php?id=1&pagina=2">loquesea</a>
,que no me lo cambia...y en teoría debería hacerlo, ¿no?

Creo que la solución va a ser acostumbrarme a hacer directamente los enlaces de mis páginas del tipo http://www.mipagina.com/articulo/12/1258. No sé si me será algo lioso a la hora de hacer las páginas pero no veo otra solución.

Por cierto, ¿has logrado solucionar lo tuyo?
  #14 (permalink)  
Antiguo 06/10/2005, 07:55
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 21 años, 11 meses
Puntos: 0
no.. aun no :( estoy furstrado con el tema... y aun no consigo un entendido en el tema me responda... aunque para que agradezco a los que respondieron por ue almenos ya aprendi algo no.. jeje.. peor en fin... no sabia eso de que no te cambia los enlaces de la pagina.. mmm... a lo mejor algo hace falta.. voy a probar con mi pagina y luego te comento... vale?

saludos
  #15 (permalink)  
Antiguo 06/10/2005, 10:05
 
Fecha de Ingreso: junio-2004
Mensajes: 158
Antigüedad: 19 años, 9 meses
Puntos: 1
has puesto el .htacces al mismo nivel que el public_html
o sea un nivel superio al script?
el error es que no encuentra el escript aparentemente

saludos y vamos arriba
Javier
  #16 (permalink)  
Antiguo 06/10/2005, 10:16
 
Fecha de Ingreso: junio-2004
Mensajes: 158
Antigüedad: 19 años, 9 meses
Puntos: 1
el conflicto tambien lo puede estar dando la barra invertida
tal vesz halla que escaparla
y prueba ademas en vez de (.+) poner (.*)

saludos
Javier
  #17 (permalink)  
Antiguo 06/10/2005, 10:32
 
Fecha de Ingreso: mayo-2002
Ubicación: Ecuador
Mensajes: 74
Antigüedad: 21 años, 11 meses
Puntos: 0
esta en public_html/.htacces y el codigo que uso en el script es:

Cita:
$usuario = $_GET['user'];

mysql_select_db($database_sistema, $sistema);
$query_editor = sprintf("SELECT * FROM usuarios WHERE `user` = '$usuario '");
$editor= mysql_query($query_editor , $sistema) or die(mysql_error());
$row_editor = mysql_fetch_assoc($editor);
$totalRows_editor = mysql_num_rows($editor);

$ideditor = $row_vendedor['id']; # aca regoco las variables a mostrar...
El Rewrite me funciona si coloco de la siguente manera

RewriteRule usuario-(.+) usuario.php?user=miusuario

con eso al escribir www.midominio.com/usuario-guitarman funciona a la perfeccion... pero quiero que quede unicamente www.midominio.com/guitarman ... es aqui cuando produce el error... no se como colocar la regla.... ya trate con / al inicio..., colocando en ""... pero nada...

Alguna idea?

trate de esta manera

Cita:
+ RewriteRule /(.+) usuario.php?user=$1 | Me funciona pero queda asi... www.midominio.com//guitarman ... ven el doble //?... lo cual no deja mostrar las imagenes ni demas... :(
eso podra ser alguna configucarion de mi dominio? no se.. estoy frustrado :(
  #18 (permalink)  
Antiguo 17/10/2005, 11:05
 
Fecha de Ingreso: junio-2004
Mensajes: 158
Antigüedad: 19 años, 9 meses
Puntos: 1
hola guitarman no se si has resuelto el problema pero te paso algunos pruebas que he realizado

en mi caso quiero configurar para
pagina/usuarios/usuario
el .htaccess
RewriteEngine on
# La regla se ejecutará si el REQUEST_URI empieza con /usuarios/
RewriteCond %{REQUEST_URI} /usuarios/.*
RewriteRule /usuarios/(.*) /index.php?user=$1

cuando recibo por el get la variable referido solo tengo que limpiar la /
por si le agregan una barra al final. espero que lo entiendas

pero tambien he probado lo siguiente
RewriteEngine on
#Re-escribo la url por index.es.html o index.es.html o index.es.html
#Según corresponda.
RewriteRule /(.*)/.* /index.php?user=$1
en el index php hice un print_r y obtenia para tu caso
usuarios/javier
en este caso si solo pones web/javier solo obtendras javier
pero cuidado porque si tienes otras material al que accedes directamente se le cambiara la url y no funcionara
yo por eso uso la clausula
RewriteCond %{REQUEST_URI} /usuarios/.*

suerte
javier

Última edición por jadi; 17/10/2005 a las 11:46
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 14:31.