elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [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 3,562 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


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

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 am por Diabliyo » En línea

s00rk

Desconectado Desconectado

Mensajes: 195



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

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.441


shell# _


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

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 am por Diabliyo » En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


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

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: 1.125



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

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

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines