elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 04:18  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  [mod_rewrite] una variable GET se pierde :S !
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [mod_rewrite] una variable GET se pierde :S !  (Leído 1,047 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.270


M.S.I Angel Cantu


Ver Perfil WWW
[mod_rewrite] una variable GET se pierde :S !
« en: 15 Noviembre 2011, 02:28 »

Buenas.

Pues uso mod_rewrite para evitar formar las URLs complicadas (index.php?algo=valor) y pues se hace mas amigable (sitio.com/dato). No me metere en explicarlo ya que asumo que saben que es.

Mi problema se basa en que una variable que estoy pasando no me la manda, vaya estas son las reglas que tengo:

Código:
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteEngine on
# raiz
RewriteBase /
# ver noticia
RewriteRule ^hoja/(.+)\-(.+)\.html$ index.php?hoja=$1
# login - conectar
RewriteRule ^log/in$ index.php?log=entrar
# logout - desconectar
RewriteRule ^log/out$ index.php?log=salir
# log - error
RewriteRule ^log/error$ index.php?log=error
# log dos - detecto intento de bruteforcing
RewriteRule ^log/dos_prev$ index.php?log=brute

# ver contenido de un menu
RewriteRule ^(.+)/$ index.php?ver=$1
# ver contenido de una sección
RewriteRule ^(.+)/(.+)/$ index.php?ver=$1&sec=$2

La ultimoa regla RewriteRule ^(.+)/(.+)/$ index.php?ver=$1&sec=$2 es la de ver contenido de una sección, en si, la variable ver no le pasa :(...

De esta forma armo el link:

Código:
<a href="misitio.com/auto/ford/">sección</a>

Haciendo un print_r($_GET), al dar clic sobre la sección, veo esto:

Código:
Array ( [ver] => index.php [sec] => ford )

Se supone que en la variable $_GET["ver"] debe estar el valor de auto. Pero mete el valor index.php.

Alguna idea ?, ya ando cansado y frustrado, mi mente no da mas :D, he pasado todo el dia viendo el htaccess, el codigo y no encuentro problema :S....

Saludos !


« Última modificación: 15 Noviembre 2011, 02:34 por Diabliyo » En línea

s00rk

Desconectado Desconectado

Mensajes: 139



Ver Perfil
Re: [mod_rewrite] una variable GET se pierde :S !
« Respuesta #1 en: 15 Noviembre 2011, 03:08 »

Al poner (.+) estas diciendo que incluya todo lo demas por lo que incluye los "/", para esto puedes mejor usar expresiones regulares o usar \w+
prueva cambiandlo asi:

RewriteRule ^(\w+)/(\w+)/$ index.php?ver=$1&sec=$2

en este :
# ver contenido de un menu
RewriteRule ^(.+)/$ index.php?ver=$1

No da error porque solo ocupamos un elemento asi que puede obtener todos a la vez, pero recomendaria igual cambiarlo por lo anterior dicho o usar expresiones regulares para irse acostumbrando jeje

el poner .+ o .* , quire decir incluir todo no importa que signo sea en este caso / , que eso si no devemos pasar por lo que ocupamos que sean solo letras.

Por lo menos esto a mi me funciono n_n*!

Suerte.


En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.270


M.S.I Angel Cantu


Ver Perfil WWW
Re: [mod_rewrite] una variable GET se pierde :S !
« Respuesta #2 en: 15 Noviembre 2011, 03:32 »

en este :
# ver contenido de un menu
RewriteRule ^(.+)/$ index.php?ver=$1

No da error porque solo ocupamos un elemento asi que puede obtener todos a la vez, pero recomendaria igual cambiarlo por lo anterior dicho o usar expresiones regulares para irse acostumbrando jeje

No le veo logica, ya que si pongo "mitisio.com/menu_01/", entonces la variable guardaria el valor de menu_01/, y no es asi, guarda solamente menu_01.

Al poner (.+) estas diciendo que incluya todo lo demas por lo que incluye los "/", para esto puedes mejor usar expresiones regulares o usar \w+
prueva cambiandlo asi:

RewriteRule ^(\w+)/(\w+)/$ index.php?ver=$1&sec=$2

en este :
# ver contenido de un menu
RewriteRule ^(.+)/$ index.php?ver=$1

No da error porque solo ocupamos un elemento asi que puede obtener todos a la vez, pero recomendaria igual cambiarlo por lo anterior dicho o usar expresiones regulares para irse acostumbrando jeje

el poner .+ o .* , quire decir incluir todo no importa que signo sea en este caso / , que eso si no devemos pasar por lo que ocupamos que sean solo letras.

Por lo menos esto a mi me funciono n_n*!

Suerte.

Pues no funciona, he cambiado las cosas y deje asi:

Código:
RewriteRule ^hoja/(.+)\-(.+)\.html$ index.php?hoja=$1
RewriteRule ^(.+)/page/(.+)$ index.php?ver=$1&page=$2
RewriteRule ^log/in$ index.php?log=entrar
RewriteRule ^log/out$ index.php?log=salir
RewriteRule ^log/error$ index.php?log=error
RewriteRule ^log/dos_prev$ index.php?log=brute

# profundidad de mas niveles
RewriteRule ^(.+)/$ index.php?ver=$1
RewriteRule ^(\w+)/(\w+)/$ index.php?ver=$1&sec=$2

Y ahora me da esto el print_r($_GET):

Código:
Array ( [ver] => nuestra_flota/ford )

Ya ni toma la variable "sec" y resulto contrario, incluyo todo sin importar el /, no lo tomo como delimitador :S.

Saludos !
« Última modificación: 15 Noviembre 2011, 03:35 por Diabliyo » En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.270


M.S.I Angel Cantu


Ver Perfil WWW
Re: [mod_rewrite] una variable GET se pierde :S !
« Respuesta #3 en: 15 Noviembre 2011, 03:41 »

Como solucion estoy haciendo un cambio a la regla actual dejandola al final con la extensión html:

Código:
# antes
RewriteRule ^(.+)/(.+)/$ index.php?ver=$1&sec=$2

# despues
RewriteRule ^(.+)/(.+)\.html$ index.php?ver=$1&sec=$2

Y ahora verl el print_r($_GET);, y veo:

Código:
Array ( [ver] => nuestra_flota [sec] => ford )

Hasta aqui vamos bien....

Pero ahora surgio un segundo conflicto :(.... existe otra regla esta:

Código:
# muestra contenido de una sección o menu
RewriteRule ^hoja/(.+)\-(.+)\.html$ index.php?hoja=$1

Que no se interpreta debido a la regla que habia puesto, es obvia la razon, pero no se me ocurre una solucion inteligente :S :(....

Saludos !
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 954



Ver Perfil
Re: [mod_rewrite] una variable GET se pierde :S !
« Respuesta #4 en: 15 Noviembre 2011, 22:14 »

Te recomiendo que dividas todo. Osea puede que el problema este con la regex y pienses que es con la configuración del modrewrite o viceversa.

Prueba testeando la regex, puedes usar esta herramienta online RegexTool, creo que no tendrás problema con la compatibilidad entre las regex, utilizan el mismo motor de expresiones regulares.

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
mod_rewrite
Desarrollo Web
gallunby 2 428 Último mensaje 9 Septiembre 2007, 10:40
por gallunby
mod_rewrite
GNU/Linux
l337* 2 658 Último mensaje 6 Febrero 2008, 09:34
por l337*
mod_rewrite
Desarrollo Web
sexto 2 485 Último mensaje 13 Mayo 2008, 18:23
por sexto
Error 91: Variable de tipo object o la variable de bloque with no esta estableci
Programación Visual Basic
brus_k10 2 2,853 Último mensaje 16 Junio 2009, 16:20
por cassiani
pierde variable sesion
Desarrollo Web
OssoH 14 4,194 Último mensaje 29 Agosto 2009, 10:05
por OssoH
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines