Foros del Web » Programando para Internet » PHP » Configuración PHP »

Redirección con htaccess

Estas en el tema de Redirección con htaccess en el foro de Configuración PHP en Foros del Web. Hola, Para visualizar la ficha del producto en mi web utilizo la url siguiente: dominio/producto/descripcion-producto/referenciaproducto Esto me lleva a un php llamado "detalle-product.php" donde cargo ...
  #1 (permalink)  
Antiguo 16/04/2021, 06:29
Avatar de SUSMO  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años
Puntos: 0
Redirección con htaccess

Hola,

Para visualizar la ficha del producto en mi web utilizo la url siguiente:

dominio/producto/descripcion-producto/referenciaproducto

Esto me lleva a un php llamado "detalle-product.php" donde cargo el producto según la referenciaproducto indicada.

En el .htaccess tengo la siguiente linea:

Código PHP:
Ver original
  1. RewriteRule ^producto/(.*)/(.*)$    /detalle-producto.php?name=$1&id=$2 [QSA]

Esta redirección me va bien mientras en la referencia del producto no hay "carácteres raros" pero a la que tiene algun carácter especial como un "%" o una "/" ya no me funciona.

La descripción del producto la codifico con htmlentities y no me da problemas.
Para pasar la referencia por url utilizo el urlencode pero el .htaccess me reconoce como referencia la primera parte de la referencia, es decir, hasta que encuentra el caracter especial en el caso de % y me da error en el caso de que haya una /

Yo tenia entendido que .* significaba cualquier carácter i que por tanto, también entraban en ese grupo los especiales, no es así?
Podéis indicarme cual es el problema? y cual seria la redirección correcta?

Gracias!
__________________
Perdida en el mundo del conocimiento
  #2 (permalink)  
Antiguo 16/04/2021, 08:40
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: Redirección con htaccess

te aclaro en esta parte

Cita:
Iniciado por SUSMO Ver Mensaje
Yo tenia entendido que .* significaba cualquier carácter i que por tanto, también entraban en ese grupo los especiales, no es así?
Podéis indicarme cual es el problema? y cual seria la redirección correcta?

Gracias!

.* en expresiones regulares significa, PUEDE que tenga algun caracter, eso incluye otros simbolos como "/" , ojo ahi eso romperia un poco la estrutura
producto/algo/otro/etc

pero bueno no ocurre por que tomas las primeras coincidencias,
lo correcto seria que hagas uso de ".+" en lugar de ".*"

ahora aqui tienes un problema de diseño
si tienes una URL tipo

/detalle-producto.php?name=esto/es/nombre&id=223

para entrar ahi directamente no hay problema, pero que ocurreo cuando haces uso del modrewrite??

ya que el simbolo "/" es muy exclusivo y tendras que codificarlo para que tu modwrite funcione

tu enlace tendria que tener la forma de



Código HTML:
<a href="producto/esto%2Fes%2Fnombre/223"> producto/esto%2Fes%2Fnombre/223 </a> 
o bien como alternativa modificar tu modrewrite, como sabes que tu ID no tendra caracteres RAROS ponerlo al principio, y todo lo que venga , darlo a tu variable "name"

Código HTML:
RewriteRule ^producto/(.+)/(.*)$    /detalle-producto.php?name=$2&id=$1 [QSA]
con eso tu variable "name" se tragara todo lo que venga
y tus enlaces estarian como quisieras

Código HTML:
<a href="producto/223/esto/es/nombre"> producto/223/esto/es/nombre </a> 
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9

Etiquetas: htaccess
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 22:59.