[RewriteRule] No encuentro como hacer esta regla ! (solved)

Iniciado por Diabliyo, 5 Octubre 2012, 22:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

Buenas.

Tengo un sitio en donde quiero tratar los datos de la URL de forma muy especifica, les cuento:

http://miweb.com/servicios/
Quiero que practicamente me pase la palabra "servicios" a una variablGET para consultar mis secciones con el nombre de "servicios".

http://miweb.com/opcion (no uso slash ' / ' al final).
Quiero tratar la palabra "opcion" de otra forma..

Las reglas que puse son:

RewriteRule ^(.+)/$ index.php?id=$1 [L]
RewriteRule ^(.+)[^/]$ index.php?id=ref&data=$1


Asi tal cual, tengo que comentar la segunda linea, porque al escribir en mi url "http://miweb.com/servicios/", intenta pasar "servicios" asi:

index.php?id=ref&data=servicios

Al comentar la segunda linea, la web funciona casi bien, ya que al escribir "miweb.com/servicios/", me manda:

index.phpid=servicios.

Pero si escribo: miweb.com/opcion

Me sale not found :S

Alguna idea ?

Diabliyo

#1
Cambie el orden de las reglas pensando que funciono, y no tampoco....

RewriteRule ^(.+)$ index.php?id=ref&data=$1
RewriteRule ^(.+)/$ index.php?id=$1 [L]


Sigue sin funcionar !

#!drvy

#2
CitarRewriteRule ^(.+)[^/]$ index.php?id=ref&data=$1

Con el . ,que yo sepa le dices que sea cualquier carácter menos \n (nueva linea).. por tanto se pasa por el **** si quieres que funcione solo cuando no incluya el shash (/)  :xD.

Yo lo haría así:
Código (apache) [Seleccionar]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.+)/$ index.php?id=$1
RewriteRule ^([a-z0-9_-]+)$ index.php?id=ref&data=$1 [NC]
</IfModule>


Resultado:

http://miweb.com/servicios/ retorna:
Código (apache) [Seleccionar]
Array ( [id] => servicios )

http://miweb.com/opciones retorna:
Código (apache) [Seleccionar]
Array ( [id] => ref [data] => opciones )


Saludos

Diabliyo

#3
Cita de: drvy | BSM en  6 Octubre 2012, 00:45 AM
Con el . ,que yo sepa le dices que sea cualquier carácter menos \n (nueva linea).. por tanto se pasa por el **** si quieres que funcione solo cuando no incluya el shash (/)  :xD.

Yo lo haría así:
Código (apache) [Seleccionar]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.+)/$ index.php?id=$1
RewriteRule ^([a-z0-9_-]+)$ index.php?id=ref&data=$1 [NC]
</IfModule>


Resultado:

http://miweb.com/servicios/ retorna:
Código (apache) [Seleccionar]
Array ( [id] => servicios )

http://miweb.com/opciones retorna:
Código (apache) [Seleccionar]
Array ( [id] => ref [data] => opciones )


Saludos

Lo he escrito tal cual me dijiste, y no funciona cuando accedo al url: http://miweb.com/servicios/, sale: Not Found.

Solo funciona cuando accedo url: http://miweb.com/opcion, envia:
index.php?id=ref&data=opcion

Saludos !

#!drvy

o.O

Eso si que es extraño xD... seguro que no te olvidaste la barra inclinada (/) antes del $ ? Yo lo acabo de probar por 9999999 vez y funciona tan normal...

Saludos

Diabliyo

#5
Me retracto... Si funciono !

Habia puesto en el RewriteRule "indx.html", me falto la "e".

Y ya funciono....

Disculpa sabes de un buen manual para aprender sobre los patrones o sintaxis en RewriteRules ?

Saludos !