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

Exquisited con RewriteRule

Estas en el tema de Exquisited con RewriteRule en el foro de Apache en Foros del Web. Exquisito porque quiero lograr exactamente lo que quiero, pero no puedo =(. Quiero URLs como esta: Código: www.example.com/Que-es-Web-2.0 www.example.com/Solucion-move_upload_file-en-PHP www.example.com/Problema-con-Notepad++ www.example.com/HTML/Como-utilizar-etiqueta-label a partir de: Código: ...
  #1 (permalink)  
Antiguo 05/01/2010, 13:52
Avatar de Null_  
Fecha de Ingreso: octubre-2008
Ubicación: Santiago
Mensajes: 530
Antigüedad: 15 años, 6 meses
Puntos: 30
Exquisited con RewriteRule

Exquisito porque quiero lograr exactamente lo que quiero, pero no puedo =(.
Quiero URLs como esta:

Código:
www.example.com/Que-es-Web-2.0
www.example.com/Solucion-move_upload_file-en-PHP
www.example.com/Problema-con-Notepad++
www.example.com/HTML/Como-utilizar-etiqueta-label
a partir de:

Código:
www.example.com/pagina.php?url=Que-es-Web-2.0
www.example.com/pagina.php?url=Solucion-move_upload_file-en-PHP
www.example.com/pagina.php?url=Problema-con-Notepad++
www.example.com/pagina.php?url=HTML/Como-utilizar-etiqueta-label
Es decir que las URLs contegan: números, letras mayúsculas y minúsculas, signo punto, signo más, diagonal, guión medio y guión bajo. Estos caracteres están controlados por PHP, así que no influye si uso una regex como (.*) o ([A-Z]+).

He logrado lo siguiente:

Código:
RewriteRule ^([A-Za-z0-9+.-_/]+)$ pagina.php?url=$1 [L]
Pero no me acepta el punto (.) ni el signo más (+), da error. Asi que debo dejarlo así:

Código:
RewriteRule ^([A-Za-z0-9-_/]+)$ pagina.php?url=$1 [L]
Cosa que no me gusta porque deberé eliminar dichos signos que irán en contra del SEO.

Otra cosa que logré fue esta, con la regla de cualquier caracter.

Código:
RewriteRule ^(.*)/$ pagina.php?url=$1 [L]
Debo poner una diagonal al final porque es el único signo que puede haber igual en todas las URLs. Funciona, pero va en contra de la estética de la URL, no del SEO. Me gustaría dejarlo así:

Código:
RewriteRule ^(.*)$ pagina.php?url=$1 [L]
Sería la solución magnifica, pero no funciona....

¿Alguna idea?
Gracias de antemano
__________________
Diego Escares
• Twitter: @diegoescares
• Web: diegoescares.com
  #2 (permalink)  
Antiguo 05/01/2010, 14:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Exquisited con RewriteRule

Tienes que escapar el punto, ya que se considera parte de la expresion regular \.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 05/01/2010, 20:11
Avatar de Null_  
Fecha de Ingreso: octubre-2008
Ubicación: Santiago
Mensajes: 530
Antigüedad: 15 años, 6 meses
Puntos: 30
Respuesta: Exquisited con RewriteRule

Ya he intentado escapando y no escapando el punto, y no funciona. Me pone extremadamente la petición http y carga sin la hoja de estilo.

Gracias por la idea ^^
__________________
Diego Escares
• Twitter: @diegoescares
• Web: diegoescares.com
  #4 (permalink)  
Antiguo 06/01/2010, 08:58
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Exquisited con RewriteRule

Prueba lo siguiente:
Código:
# No redireccionar si es un archivo o directorio válido
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.+)$ pagina.php?url=$1 [L]
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 06/01/2010, 11:25
Avatar de Null_  
Fecha de Ingreso: octubre-2008
Ubicación: Santiago
Mensajes: 530
Antigüedad: 15 años, 6 meses
Puntos: 30
Respuesta: Exquisited con RewriteRule

Muy bien, ahora puedo utilizar los puntos en la URL, es la mejor alternativa hasta el momento. Pero aún los + no funcionan, probé con ^(.+)$ y ^(.*)$ en tu código pero da el mismo resultado.
Si no hay otra alternativa, me quedo con este =).
Ah, tarde me di cuenta que puedo usar acentos, vale la pena tener enlaces como los de wikipedia.

Gracias ^^
__________________
Diego Escares
• Twitter: @diegoescares
• Web: diegoescares.com
  #6 (permalink)  
Antiguo 06/01/2010, 11:32
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Exquisited con RewriteRule

Hola, Null_.

El problema es que el signo + en una URL tiene un significado especial, cuando recibas ese valor en PHP, tendrás un espacio. Si quieres obtener el signo como tal, debes representarlo en la URL como %2B
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 07/01/2010, 17:09
Avatar de Null_  
Fecha de Ingreso: octubre-2008
Ubicación: Santiago
Mensajes: 530
Antigüedad: 15 años, 6 meses
Puntos: 30
Respuesta: Exquisited con RewriteRule

Hola David ^^
Lo sé, pero he visto URLs con + en wikipedia y taringa y no es necesario representarlo como %2B (excepto en los href del html). Creo que el signo + es interpretado como espacio cuando va después del signo ? para las variables del lenguaje de servidor, si van antes, el + se representa como un %2B y el espacio como %20.
Bueno, como el signo más no es tan relevante y no quiero URLs escribas en los href como Problema-con-Notepad%2B%2B eliminaré todos los signos +.

Si hay algo que satisface esto que quería lograr, no me niego a tal solución xD.
Ya me lo solucionaste con lo del punto y estoy feliz con ese resultado ^^.

Saludos y gracias por responder =D.
__________________
Diego Escares
• Twitter: @diegoescares
• Web: diegoescares.com
  #8 (permalink)  
Antiguo 08/01/2010, 10:32
Avatar de Null_  
Fecha de Ingreso: octubre-2008
Ubicación: Santiago
Mensajes: 530
Antigüedad: 15 años, 6 meses
Puntos: 30
Respuesta: Exquisited con RewriteRule

Ya lo tengo!!!
Creo que mi vicio por hacer exactamente lo que quiero no me di por vencido y en la noche en la cama se me ocurrió una solución jaja.

Tenía razón en lo anterior, lo comprobé:
Cita:
el signo + es interpretado como espacio cuando va después del signo ? para las variables del lenguaje de servidor, si van antes, el + se representa como un %2B y el espacio como %20.
Aunque en la parte que subraye no necesariamente es así, por ejemplo, si tenemos carpetas con el signo + en la URL se escriben como tal sin escribir su codificación.

Bueno les cuento como lo solucioné.

Primero tomé el código de David y las URLs me aceptaron los puntos. Muchas gracias David ^^
Segundo, con lo que dije anteriormente, almacené en la base de datos las URL cambiando los + por espacios. Tenía por ejemplo:
Código:
La-suma-de-2+3
que quedó como
Código:
La-suma-de-2 3
Así cuando se pida:
Código:
http://www.example.com/La-suma-de-2 3
En realidad se estará accediendo con la regex del .htacces a:
Código:
http://www.example.com/pagina.php?url=La-suma-de-2 3
Y como los espacios se transforman a + cuando están después del signo ?, estaríamos accediendo a:
Código:
http://www.example.com/pagina.php?url=La-suma-de-2+3
por lo que podemos enlazar libremente a esta página como:
Código:
<a href="/La-suma-de-2+3">
<a href="/La-suma-de-2%2B3">
<a href="/La-suma-de-2%203">
<a href="/La-suma-de-2 3">
Y obviamente se elige la primera =) (no es inválido frente al validador de la W3C como pensaba).

Saludos!
__________________
Diego Escares
• Twitter: @diegoescares
• Web: diegoescares.com

Etiquetas: rewriterule
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 21:56.