Foros del Web » Administración de Sistemas » Apache »

Duda Mod Rewrite

Estas en el tema de Duda Mod Rewrite en el foro de Apache en Foros del Web. Buenas, he mirado como va esto del mod rewrite pero no me aclaro mucho... Tengo una sección con un form de busqueda. Ese form tiene ...
  #1 (permalink)  
Antiguo 19/04/2008, 13:56
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Duda Mod Rewrite

Buenas, he mirado como va esto del mod rewrite pero no me aclaro mucho...

Tengo una sección con un form de busqueda. Ese form tiene un montón de variables que se pasan por url. Entonces tambien tengo un paginador para paginar los resultados.

Para generar una url amigable del tipo "busqueda/campo/campo/pagina1", en el htaccess estoy obligado a poner todas las variables pasadas por get?

Esta es mi url:

busqueda.php?tags=&uploader=&autor=&avanzado=1&cat egoria=*&nota=6&orden=enviado&visualizar=DESC&envi ar.x=52&enviar.y=19

Y cuando hago la paginacion, paso otra que es $page. Tengo que poner todas estas variables en el htaccess?
  #2 (permalink)  
Antiguo 19/04/2008, 13:59
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
Re: Duda Mod Rewrite

Si, ya que va a ser una URL que envie los datos en modo GET deben ir todos los datos "incrustados" en la URL, ya que deben ser recuperados por el servidor.
Ahora bien, no es necesario separarlas por barras (/), puedes utilizar guiones, comas, o lo que quieras. Por ejemplo con campos de longitud fija no necesitas separadores.
__________________
Grupos de Música
Pop Music Stars
  #3 (permalink)  
Antiguo 19/04/2008, 14:07
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

Y si pongo barras, y un campo está vacio luego, se veria "//" en el navegador?
  #4 (permalink)  
Antiguo 19/04/2008, 15:24
 
Fecha de Ingreso: febrero-2008
Mensajes: 296
Antigüedad: 16 años, 8 meses
Puntos: 2
Re: Duda Mod Rewrite

Cita:
Iniciado por AbdelioR Ver Mensaje
Y si pongo barras, y un campo está vacio luego, se veria "//" en el navegador?
No. Pero com te djeron anteriormente, no necesitas precisamente usar barra,ademas para pasar estas variables a el URL necesitas tambien usar preg_replace que aqui es donde pondras que el espacio en blanco (""), tome no tome valor,lo cual dará que en tu direccion no se ve nada. Es decir, si no quieres que aparezcan ciertos caracteres,entonces deberas crear una funcion que elimine esto y pase solo lo que desees a tu URL.
No se si me explico,pero asi funciona.
  #5 (permalink)  
Antiguo 19/04/2008, 15:31
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

No te entendí muy bien...

a ver ahora mismo tengo puesto en mi .htaccess esto:

Rewriterule ^busqueda/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+)/(.+) busqueda.php?tags=$1&uploader=$2&autor=$3&avanzado =$4&categoria=$5&nota=$6&orden=$7&visualizar=$8&en viar.x=$9&enviar.y=$10



Todo esto es información que envia un formulario para hacer una busqueda.

De estos campos, hay algunos que se pueden enviar en blanco, ya que el usuario no ha introducido nada, entonces he probado a entrar mediante:



http://www.url.com/busqueda////1/*/6/enviado/DESC/54/16


Pero no funciona :/
  #6 (permalink)  
Antiguo 19/04/2008, 16:03
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
Re: Duda Mod Rewrite

La barra hay que escaparla, y entre parentesis hay que poner "hasta la siguiente barra",
Ah, y para los campos obligatorios sustituye el asterisco por el '+'. Sería algo así:
Código:
Rewriterule ^busqueda\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)$    busqueda.php?tags=$1&uploader=$2&autor=$3&avanzado =$4&categoria=$5&nota=$6&orden=$7&visualizar=$8&en viar.x=$9&enviar.y=$10
__________________
Grupos de Música
Pop Music Stars
  #7 (permalink)  
Antiguo 19/04/2008, 19:55
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

Vale, ya me funciona, pero si un parametro esta vacio, en la url se mostrará "url//parametro2", dejando el "//" vacio, no? es correcto eso?

Y otra cosa, si tengo 3 parametros:

Rewriterule ^resultados/([^\/]*)\/([^\/]*)\/pg([^\/]*)$ busquedaRapida.php?search=$1&rapido=$2&page=$3

Puedo hacer que si solo especifico los dos primeros, me funcione igual? lo digo por que el tercero es la pagina de paginación de resultados, y he visto sitios que a la primera pagina puedes acceder mediante "/pagina1" o sin poner nada. Como se puede hacer esto?
  #8 (permalink)  
Antiguo 20/04/2008, 00:51
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Re: Duda Mod Rewrite

Bueno honestamente eso no es nada del otro mundo.


Veamos veamos.. vamos a pasar.

http://www.sitioweb.com/articulos.php?id=49 a http://www.sitioweb.com/articulos/49/

1- primero debemos crear nuestro archivo .htaccess

Código PHP:

 Options 
+FollowSymLinks
RewriteEngine on
RewriteRule 
(.*)/(.*)/$ /articulos.php?$1=$
ahora la pagina articulos.php le vamos a poner este codigo para ver si funciona nuestro mod_write

Código PHP:

 
if(isset($_GET['id'])){

 echo 
"MI APACHE ES BUENO :-)";

 }

  else { 

 
        echo 
"Mi APACHE ES MALO :-(";

 } 
TIP: ahora si te funciona debes de llamar todas tus imagenes , css , flash etc. directamente.. ejemplo.

www.sitioweb.com//imagenes/logo.jpg
www.sitioweb.com//css/plantilla.css
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #9 (permalink)  
Antiguo 20/04/2008, 02:14
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
Re: Duda Mod Rewrite

Cita:
Iniciado por AbdelioR Ver Mensaje
Vale, ya me funciona, pero si un parametro esta vacio, en la url se mostrará "url//parametro2", dejando el "//" vacio, no? es correcto eso?

Y otra cosa, si tengo 3 parametros:

Rewriterule ^resultados/([^\/]*)\/([^\/]*)\/pg([^\/]*)$ busquedaRapida.php?search=$1&rapido=$2&page=$3

Puedo hacer que si solo especifico los dos primeros, me funcione igual? lo digo por que el tercero es la pagina de paginación de resultados, y he visto sitios que a la primera pagina puedes acceder mediante "/pagina1" o sin poner nada. Como se puede hacer esto?
Vale, me alegro que te funcione.
Si un parametro está vacio y no es obligatorio (has puesto '*' en lugar de '+' en la expresión regular) pues sí, en la url no irá y por tanto llevar los separadores seguidos (en tu caso '//').

Ahora bien, no tienes por que limitarte a emplear una expresión regular únicamente. Puedes poner tantas como necesites.
Por ejemplo si prefieres que el parámetro de página no vaya puedes usar dos expresiones regulares: la primera sin parámetro de página (enviandole un valor por defecto al PHP) y la segunda con él. Ah y para que cuando una expresión regular cumple y no quieres que siga analizando otras, le pones [L] al final de la línea. Ejemplo:


Rewriterule ^resultados\/([^\/]+)\/([^\/]+)$ busquedaRapida.php?search=$1&rapido=$2&page=1 [L]

Rewriterule ^resultados\/([^\/]+)\/([^\/]+)\/pg([^\/]*)$ busquedaRapida.php?search=$1&rapido=$2&page=$3 [L]
__________________
Grupos de Música
Pop Music Stars
  #10 (permalink)  
Antiguo 20/04/2008, 11:31
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

Vale, lo que comentas eddwinpaz ya lo habia hecho :p

De lujo la explicación aloqui, ahora va de perlas. Ya me funciona la cosa ^^

Sobre lo de ([^\/]+) que me has puesto, es lo mismo que ponga (.+)? lo digo porque a efectos prácticos es lo mismo por lo que veo.

Y por el tema de barras, podria hacer que si la url buena es "galeria/otros/", yo pudiera escribir esa o "galeria/otros" sin la barra final?
  #11 (permalink)  
Antiguo 20/04/2008, 12:12
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
Re: Duda Mod Rewrite

Cita:
Iniciado por AbdelioR Ver Mensaje
Sobre lo de ([^\/]+) que me has puesto, es lo mismo que ponga (.+)? lo digo porque a efectos prácticos es lo mismo por lo que veo.
Yo creo que no es lo mismo. Quizá te interese mirar ésta página sobre expresiones regulares

Cita:
Iniciado por AbdelioR Ver Mensaje
Y por el tema de barras, podria hacer que si la url buena es "galeria/otros/", yo pudiera escribir esa o "galeria/otros" sin la barra final?
Precisamente para hacer el último caracter opcional se usa la interrogación, o la doble interrogación (dependiendo de si prefieres que vaya sin ella):
galeria\/otros\/??
__________________
Grupos de Música
Pop Music Stars
  #12 (permalink)  
Antiguo 20/04/2008, 12:20
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

Aham, vale, voy a echarle un vistazo a las expresiones regulares a ver si me aclaro con la web que me has pasado :P

Muchas gracias de nuevo por la aclaración :)
  #13 (permalink)  
Antiguo 21/04/2008, 23:46
 
Fecha de Ingreso: abril-2008
Mensajes: 2
Antigüedad: 16 años, 7 meses
Puntos: 0
Pregunta Re: Duda Mod Rewrite

Hola a todos!

estuve leyendo este post y me resulto muy interesante!.. GRACIAS POR COMPARTIR LA DATA!!!

lo que no pude hacer fue entender como lo usa Picasa, alguien lo vio?

cuando entras por primera vez usas la url http://picasaweb.google.com/USUARIO

una vez dentro (y si el usuario existe) te muestra lo albumes cuyos links te llevan a http://picasaweb.google.com/USUARIO/ALBUM donde, por ultimo, si haces click arrib de una foto te lleva a http://picasaweb.google.com/USUARIO/ALBUM/photo#iddelafoto

Alguien tiene idea de como hacen esto? porque hay variables que a veces aparecen y deben ser leidas.. y otras veces no aparecen!..

me estoy rompiendo la cabeza hace una semana y no me sale =(

GRACIAS!
des.
  #14 (permalink)  
Antiguo 22/04/2008, 00:13
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Re: Duda Mod Rewrite

el #iddelafoto es una referencia del html para decirle en donde se debe parar. asi pasa con foros del web..

no haz visto las paginas web que dicen top o bottom ? arriba o abajo y si les haces click te llevan arriba sin tener que hacer scroll ? bueno cuando hagas click mira la URL y veras algo asi

www.dominio.com/noticia/89/#top inclusive Foros del web tiene eso en la parte de abajo a la derecha ...
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #15 (permalink)  
Antiguo 22/04/2008, 08:59
 
Fecha de Ingreso: abril-2008
Mensajes: 2
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Duda Mod Rewrite

Cita:
Iniciado por eddwinpaz Ver Mensaje
el #iddelafoto es una referencia del html para decirle en donde se debe parar. asi pasa con foros del web..

no haz visto las paginas web que dicen top o bottom ? arriba o abajo y si les haces click te llevan arriba sin tener que hacer scroll ? bueno cuando hagas click mira la URL y veras algo asi

www.dominio.com/noticia/89/#top inclusive Foros del web tiene eso en la parte de abajo a la derecha ...

Hola Edd!

muchas gracias por tu respuesta! creo que me exprese mal, me preguntaba como hacian con todo el resto particularmente, lo que me detallaste lo conozco como ancla, se como funciona y de hecho me imagino que Picasa lo usa solo como separador (no como ancla) ya que cuando carga no te mueve dentro de la misma pagina sino que te actualiza un contenedor.

Mi pregunta es como hacen para primero leer usuario desde h**p://picasaweb.google.com/USUARIO y luego poder leer el id del album desde h**p://picasaweb.google.com/USUARIO/ALBUM para finalmente pasarse a la foto en h**p://picasaweb.google.com/USUARIO/ALBUM/FOTO.. me explico? porque si uso el mod rewrite en h**p://picasaweb.google.com/USUARIO puedo obtener el usuario.. pero si leo h**p://picasaweb.google.com/USUARIO/ALBUM estoy leyendo o el primer valor (USUARIO) o el ultimo (ALBUM) pero no los dos en caso que aparezcan conuntamente.. y ni hablar de sumarle la /FOTO!!! hahahha

GRACIAS! =)
des.
  #16 (permalink)  
Antiguo 23/04/2008, 07:17
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

Me acabo de dar cuenta de que no se pueden pasar más de 9 parámetros a traves del RewriteRule.

He buscado por internet como pasar más de 9 ya que $10 no lo interpreta correctamente, pero no he encontrado nada que me aclare.

Alguien puede decirme como puedo hacerlo?

Gracias.
  #17 (permalink)  
Antiguo 23/04/2008, 10:51
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
Re: Duda Mod Rewrite

No estoy seguro de que Apache lo interprepe bien, pero en Perl se puede hacer con lo que se llaman "backreferences". Y es usando el backslash. Así el parámetro 10 se recupera con '\10' , el 11 con '\11", etc.

De todas formas si tienes muchos parámetros, quizá te interese hacer el parseo directamente en tú código en lugar de que lo haga Apache. Es decir llamas al fichero .php que lo va a interpretar sin pasarle ningun parámetro. El .php cogerá la variable de entorno 'REQUEST_URI' y la parseará (con split, expresiones regulares o lo que quieras) para obtener los parámetros que hay en la misma.
__________________
Grupos de Música
Pop Music Stars
  #18 (permalink)  
Antiguo 23/04/2008, 12:03
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

Vale, lo he hecho con REQUEST_URI, supongo que lo habré hecho bien, funcionar funciona.

Código PHP:
completa $_SERVER['REQUEST_URI'];
$total explode('/',$completa);

$tags sql_quote($total[2]);
$uploader sql_quote($total[3]);
$autor sql_quote($total[4]);
$categoria sql_quote($total[5]);
$nota sql_quote($total[6]);
$orden sql_quote($total[7]);
$visualizar sql_quote($total[8]);
$comentarios sql_quote($total[9]);
$votos sql_quote($total[10]);
$page $total[11]; 

Muchas gracias ^^
  #19 (permalink)  
Antiguo 23/04/2008, 12:17
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
Re: Duda Mod Rewrite

Solo un detalle, debes tener en cuenta que el caracter '/' no debe estar presente en los campos porque si no se te van a descolocar. Por ejemplo si el autor fuera "AC/DC" tendrías problemas , en ese caso deberías usar %2F en lugar de '/', o quizá deberías usar otro separador de campo como el '|'.
__________________
Grupos de Música
Pop Music Stars
  #20 (permalink)  
Antiguo 01/05/2008, 11:06
Avatar de Alquiberia  
Fecha de Ingreso: mayo-2008
Mensajes: 1
Antigüedad: 16 años, 6 meses
Puntos: 0
Exclamación Re: Duda Mod Rewrite

Cita:
Iniciado por AbdelioR Ver Mensaje
Me acabo de dar cuenta de que no se pueden pasar más de 9 parámetros a traves del RewriteRule.

He buscado por internet como pasar más de 9 ya que $10 no lo interpreta correctamente, pero no he encontrado nada que me aclare.

Alguien puede decirme como puedo hacerlo?

Gracias.
AbdelioR, yo tengo el mismo problema que tu.

Necesito pasar 16 variables, pero como tu muy bien dices si supero las 9 da problemas, la 10 la reconoce como el valor de la variable 1 más el 0.

¿Has consegido solucionar el problema?

Esta es mi web, actualmente tengo un apaño hecho, pero es algo temporal:

http://www.alquiberia.es

Gracias.
  #21 (permalink)  
Antiguo 01/05/2008, 11:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: Duda Mod Rewrite

Tema trasladado a Apache.
  #22 (permalink)  
Antiguo 04/05/2008, 07:44
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

Si, lo solucioné como digo en mi último mensaje.

Si si aloqui, lo tenia controlado ;)
  #23 (permalink)  
Antiguo 13/05/2008, 04:22
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 18 años, 2 meses
Puntos: 8
Re: Duda Mod Rewrite

Aprovecho este tema para preguntar una nueva duda que tengo.

En el servidor donde estaba antes funcionaba pero en el nuevo no.

La url: http://www.url.com/buscar.php/*/*/*/.../-1/-1/10/#res

necesita que le pase "buscar.php" porque si pongo "buscar/" como estaba antes no encuentra el archivo, antes si lo hacia.

Como las siguientes variables no las paso por modrewrite, habria alguna manera de hacer que con "buscar" me fuera a "buscar.php"?

Gracias.
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 09:28.