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

Capturar variable PHP imprimiendo .htm URL con mod_rewrite

Estas en el tema de Capturar variable PHP imprimiendo .htm URL con mod_rewrite en el foro de Apache en Foros del Web. Hola. Apenas mi inicio con esto del mod_rewrite y creo que está más fácil entender el chino y mandarín. Mi duda es la siguiente. Manejo ...
  #1 (permalink)  
Antiguo 20/05/2009, 16:19
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Pregunta Capturar variable PHP imprimiendo .htm URL con mod_rewrite

Hola. Apenas mi inicio con esto del mod_rewrite y creo que está más fácil entender el chino y mandarín.

Mi duda es la siguiente.

Manejo URLs típicas de tipo:

Código:
www.dominio.com/pagina.php?id=1.
con el mod_rewrite las he cambiado para que se imprima así:

Código:
www.dominio.com/id-1.htm
Usándolo de esto modo (típico y sencillo):

Código:
Options +FollowSymLinks
RewriteEngine on
RewriteRule id-(.*)\.htm$ pagina.php?id=$1
Y creando los todos los links de la página dinámicamente en HTML así:

Código:
<a href="www.dominio.com/id-<?= $row["id"] ?>.htm">
Hasta aquí todo funciona bien, y ahora lo que quiero hacer y no he podido saber cómo es lo siguiente:

A mi .htm URL:
Código:
<a href="www.dominio.com/id-<?= $row["id"] ?>.htm">
Quiero meterle dos variables más ya establecidas y que me siga detectando el id # y sin que me afecte la ruta de la URL, de este modo, :
Código PHP:
<a href="www.dominio.com/id-<?= $row["var1"?>-<?= $row["var2"?>-<?= $row["id"?>.htm">
Lo que no sé es como "setear" el mod_rewrite para que ésto me funcione.. Creo saber que tiene que ver algo con el condicional: RewriteCond %{QUERY_STRING} pero no sé cómo aplicarlo en este caso.

¿Alguna idea? Les agradezco cualquier ayuda, sugerencia o referencia.
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.

Última edición por SI TAN SOLO TUVIERA; 20/05/2009 a las 16:27
  #2 (permalink)  
Antiguo 21/05/2009, 00:13
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Respuesta: Capturar variable PHP imprimiendo .htm URL con mod_rewrite

Creo que sería parecido, pero tendrías que poner un rewritecond para cada combinación que pueda darse, y añadir un [L] al final de cada uno para indicar que si esa regla se cumple no siga buscando más abajo...

Options +FollowSymLinks
RewriteEngine on
RewriteRule id-(.*)-(.*)-(.*)\.htm$ pagina.php?id=$1&var1=$2&var2=$3 [L]
RewriteRule id-(.*)-(.*)\.htm$ pagina.php?id=$1&var1=$2 [L]
RewriteRule id-(.*)\.htm$ pagina.php?id=$1 [L]

De esta forma, si detecta 3 variables, aplica la primera, si detecta 2 aplica la segunda y si detecta 1 la tercera.

__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #3 (permalink)  
Antiguo 21/05/2009, 09:09
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Capturar variable PHP imprimiendo .htm URL con mod_rewrite

......................................
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.

Última edición por SI TAN SOLO TUVIERA; 21/05/2009 a las 11:19
  #4 (permalink)  
Antiguo 21/05/2009, 09:17
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Capturar variable PHP imprimiendo .htm URL con mod_rewrite

ahora sí me funcionó!! =D

Estaba poniendo mal el orden de las variables en la página que me genera el link!!!

Grande viejo!!! te quedo sumamente agradecido!!!
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.
  #5 (permalink)  
Antiguo 21/05/2009, 11:05
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Capturar variable PHP imprimiendo .htm URL con mod_rewrite

Hola Ferny, discúlpame que te moleste nuevamente, se me está presentando otro problemita, no sé si puedas ayudarme en este caso.

Resulta que algunas de estas dos variables que le agregué a la URL, como son STRINGS algunas vienen con espacios en blanco cuando son dos nombres. Entonces lo que pasa es que la variable principal que usa como referencia para cargar la página, la id=# se junta con el pedazo de STRING del espacio en blanco a la derecha y pues cuando hace el SELECT en la base obviamente no lo encuentra.

Me explico mejor. Esta es mi url reescrita:
Código HTML:
www.dominio.com/id-1-string1-string2.htm
Si una de esas strings es un nombre con espacios entre sí, por ejemplo:
Código HTML:
www.dominio.com/id-1-str ing1-string2.htm
En la página que va cargar MySQL busca el SELECT id=1-str y obviamente no existe.

Mi pregunta es, qué más le puedo añadir al RewriteRule de las Expresiones Regulares para que esa primer variable (id) la tome tal cual como es como referencia, sin que le afecte el cómo esté escrito lo demás...

Options +FollowSymLinks
RewriteEngine on
RewriteRule id-(.*)-(.*)-(.*)\.htm$ pagina.php?id=$1&var1=$2&var2=$3 [L]
RewriteRule id-(.*)-(.*)\.htm$ pagina.php?id=$1&var1=$2 [L]
RewriteRule id-(.*)\.htm$ pagina.php?id=$1 [L]


Si me puedes ayudar, gracias nuevamente de antemano!!
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.
  #6 (permalink)  
Antiguo 22/05/2009, 04:24
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Respuesta: Capturar variable PHP imprimiendo .htm URL con mod_rewrite

Lo que tienes que hacer es en tu código fuente transformar los espacios en los caracteres %20

Si usas PHP, lo haces utilizando la función url_encode(), a la que pasas como parámetro la URL del link que vas a poner, por ejemplo:

echo url_encode("www.dominio.com/id-1-str ing1-string2.htm");

Eso imprimiría:

www.dominio.com/id-1-str%20ing1-string2.htm

Después en la consulta MySQL, creo que tendrías que hacer un url_decode() para revertir el cambio, es decir, transformar los %20 de nuevo en espacios y que así no dé error la consulta...

No sé si el .htaccess te podría ayudar en este caso
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #7 (permalink)  
Antiguo 22/05/2009, 05:19
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Capturar variable PHP imprimiendo .htm URL con mod_rewrite

Eso fue lo primero que traté, convertí los espacios en blanco en la URL en signos (+) con PHP y la función urlencode pero no funcionó.

La cosa es que antes de imprimirse la variable en la URL, ésta ya ha pasado internamente por el mod_rewrite como un string de dos palabras, o sea que no funca y como no encontré la solución con el mod_rewrite y las expresiones regulares, lo que hice fue que en MySQL en el momento de hacer el SELECT y la validación con el # de ID, le extraje a ésta los 3 primeros digitos y ya lo valida, pero cuando sean de 4 y también tenga ID de 3 dígitos si voy a estar en problemas otra vez. Seguiré buscando entonces..

De cualquier forma Gracias!!
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.
  #8 (permalink)  
Antiguo 22/05/2009, 05:46
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Respuesta: Capturar variable PHP imprimiendo .htm URL con mod_rewrite

Cita:
convertí los espacios en blanco en la URL en signos (+) con PHP
Eso no es necesario. Mete sólo la función urlencode() a la variable original con espacios. Al final en el código HTML generado tienes que ver que los espacios se transformen en %20
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #9 (permalink)  
Antiguo 22/05/2009, 06:06
Avatar de SI TAN SOLO TUVIERA  
Fecha de Ingreso: marzo-2006
Ubicación: Aburrilandia, US
Mensajes: 652
Antigüedad: 18 años, 1 mes
Puntos: 3
Respuesta: Capturar variable PHP imprimiendo .htm URL con mod_rewrite

Sí, exacto, se rellenan los espacios en blanco en la URL, pero la página que ésta va cargar no funca al validar la ID si la 2da o 3era variable es un nombre con dos palabras.

Código:
...WHERE c.id=".$_GET["id"]."";
El valor de esta "id", digamos que es 150, lo lee correctamente, pero si el valor de la segunda o tercera variable es digamos "Mercedes Benz" la validación de MySQL en la página a cargar la haría así...

Código:
...WHERE c.id=".$_GET["150-Mercedes"]."";
y pues obviamente bota error. No sé si me hago entender. Esto es independiente de si la URL tiene o no tiene espacios. La URL puede tener espacios e igual carga con tal de que el valor de la primer "id" que le pasa el mod_rewrite sea númerico. Si el valor de la 2da o 3era variable tiene dos palabras o espacio, lo que haya de este espacio para la izquierda se junta con el valor de la primera variable "id".

Creo que debe haber una forma de arreglar esto en el RewriteRule...

Código:
RewriteRule id-(.*)-(.*)-(.*)\.htm$ pagina.php?id=$1&var1=$2&var2=$3 [L]
Cómo decirle que imprima la primera variable tal cual sin que le afecte como esté escrita o definida la 2da o la 3era..
__________________
¿Dónde encontrar carros baratos en USA? En Autopten.

Última edición por SI TAN SOLO TUVIERA; 22/05/2009 a las 06:16
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:41.