PHP - Ayuda con doble redirección con htaccess y php

 
Vista:
Imágen de perfil de Diego
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por Diego (45 intervenciones) el 01/05/2017 11:25:10
Amig@s, que tal!

Espero que puedan ayudarme con esto, me tiene atorado desde hace unos días

Tengo unas redirecciones en htaccess que no me funcionan bien, la primera si funciona pero la segunda ya no.

Mi htaccess
1
2
3
4
5
6
RewriteEngine On
 
  RewriteCond %{SCRIPT_FILENAME} !-d
  RewriteCond %{SCRIPT_FILENAME} !-f
  RewriteRule ^productos/([1-9]+)-(.+)$ productos/category.php?id=$1&seo=$2 [L]
  RewriteRule ^productos/([1-9]+)--(.+)$ productos/details.php?pid=$1&pseo=$2 [L]

El enlace que funciona con el primer Rewrite y redirige a la página de las categorías como en este ejemplo: productos/1-accesorios
1
<a href="../productos/'.$row_categories['id_category'].'-'.$seo.'" title="'.$row_categories['name'].'"><img src="../img/categories/'.$row_categories['picture'].'" alt="'.$row_categories['name'].'"></a>

El segundo enlace tiene que llevar a los detalles del producto y debe estar en la misma ruta que la categoría: productos/1234-accesorio-para-television
1
<a href="../productos/'.$row_products['id_product'].'--'.$seo.'" title="'.$cod_name.'" class="btn-dark" title="Ver '.$cod_name.'"><i class="fa fa-magic fa-lg"></i></a>

En este último enlace, me lleva al enlace de ejemplo pero me muestra un error 404, he intentado modificar la posición de los números para que sea diferente al primer enlace de arriba pero sigue sin funcionar, hasta le coloque doble guión medio

¿Alguna idea o solución que tengan?

Saludos!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por kip (877 intervenciones) el 02/05/2017 00:13:38
Hola, creo que el problema esta en el flag L que colocas en cada RewriteRule...

The [L] flag causes mod_rewrite to stop processing the rule set. In most contexts, this means that if the rule matches, no further rules will be processed. This corresponds to the last command in Perl, or the break command in C. Use this flag to indicate that the current rule should be applied immediately without considering further rules.
https://httpd.apache.org/docs/current/rewrite/flags.html

Lo que dice es que el proceso de reescritura pare y no aplique a ninguna otra regla despues, correspondiente a la misma url que es tu caso,sabiendo eso:

1
2
RewriteRule ^productos/([1-9]+)-(.+)$ productos/category.php?id=$1&seo=$2
RewriteRule ^productos/([1-9]+)--(.+)$ productos/details.php?pid=$1&pseo=$2 [L]

Podriamos dejar al final aquel flag no ?

Pero creo que tienes otro error que podria mejorar la esctructura y comprensión de tu URL reescrita, podrias hacerlo asi:

1
2
RewriteRule ^productos/categoria/([1-9]+)-(.+)$ productos/category.php?id=$1&seo=$2
RewriteRule ^productos/detalles/([1-9]+)-(.+)$ productos/details.php?pid=$1&pseo=$2

Creo que de esa forma y evitando colocar doble guion (que quizas confunda) dejas mas claro lo que estas visitando no ? Pero es tu decision.

Prueba con lo que te comente del flag y nos avisas si funciona o si persiste el error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Diego
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por Diego (45 intervenciones) el 02/05/2017 00:57:33
Hola kip, gracias por responder

Hice las modificaciones que me sugeriste y funciona correctamente el primer enlace, pero sigo presentando los mismos problemas con el segundo, me sigue mostrando error 404.

Así es como quedo el htaccess

1
2
RewriteRule ^productos/categoria/([1-9]+)-(.+)$ productos/category.php?id=$1&seo=$2
RewriteRule ^productos/detalle/([1-9]+)-(.+)$ productos/details.php?id=$1&seo=$2 [L]

Probé cambiando los operadores del segundo enlace para que sean distintos al primero pero aún así no funciona.
¿Qué crees que pueda ser?

Gracias

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por kip (877 intervenciones) el 02/05/2017 01:10:06
Entiendo, olvide mencionar y se me paso por alto la condicion que colocas antes de estos:

1
2
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

Puedes o bien eliminar estas condiciones, ya que lo que establecen es que mientras no existan archivos con el nombre de la url que sera reescrita se aplique la regla....

No se si dejaste aquellas lineas ya que no las muestras, yo te recomendaria quitarlas, no creo que tengas archivos en directorios como los que colocas productos/detalle/etc-etc

Prueba de esa forma o si deseas mantenerlos coloca una condicion por cada regla:


1
2
3
4
5
6
7
8
9
RewriteEngine On
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^productos/categoria/([1-9]+)-(.+)$ productos/category.php?id=$1&seo=$2
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^productos/detalle/([1-9]+)-(.+)$ productos/details.php?id=$1&seo=$2

Nos avisas!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por Diego (45 intervenciones) el 02/05/2017 01:35:15
He eliminado las condiciones pero sigue sin funcionar

No sé que pueda estar mal, estoy empezando a implementar el uso del htaccess

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por kip (877 intervenciones) el 02/05/2017 01:49:43
Puedes colocar imagenes de como tienes el directorio de aquellos archivos y tambien del script de donde llamas a estos con el <a> ?

Asi mismo coloca el codigo de como quedaron los <a> luego de las modificaciones que hiciste.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por Diego (45 intervenciones) el 02/05/2017 02:13:28
Me funcionan unas url's y otras no, por ejemplo, esta si me funciona:

productos/detalle/1257-soporte-a-techo-para-2-pantallas

Pero esta no
productos/detalle/1025-accesorio-para-multicontacto

Qué puede estar ocasionando el conflicto?

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por kip (877 intervenciones) el 02/05/2017 02:40:51
Segun veo lo que haces es obtener el id y la cadena posterior para consultar a la base de datos, usas ambos o solo el id para la consulta ?

Puedes colocar el codigo de como procesas estos datos que obtienes por url ?

Quizas pueda ser que hagas una busqueda sensible a mayusculas o minusculas si usas la cadena posterior al ID, pero no estoy seguro, coloca el codigo y veamos que tienes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por Diego (45 intervenciones) el 02/05/2017 02:53:31
Uso solo el ID para obtener la información del producto y el nombre para el SEO.

Este es el código del enlace:

1
<a href="../../productos/detalle/'.$row_products['id_product'].'-'.$seo.'" title="'.$cod_name.'" class="btn-dark" title="Ver '.$cod_name.'"><i class="fa fa-magic fa-lg"></i></a>

Lo raro es que en algunos enlaces si funciona y en otros no, estaba pensando que puede ser algo en la expresión numera del htaccess, pero no estoy muy seguro.

La parte del SEO siempre es en minúsculas, cuando me carga la página en algunos enlaces, solo obtengo el ID.

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por kip (877 intervenciones) el 02/05/2017 03:06:49
Al usar los <a> no es necesario hacer eso de subir niveles con ../, ya que aqui estas colocando la regla en tu .htaccess que esta en la carpeta principal de tu sitio, es decir que si el archivo que procesara las peticiones en la url esta dos niveles mas arriba que el htaccess es alli donde debes colocar aquello:

1
RewriteRule ^productos/categoria/([1-9]+)-(.+)$ ../../productos/category.php?id=$1&seo=$2

Pero si tu archivo htaccess esta en el mismo nivel quedaria como lo tienes ahora, no es necesario hacerlo desde HTML, solo en PHP cuando usas include o requiere.

Dejalo asi:

1
<a href="/productos/detalle/'.$row_products['id_product'].'-'.$seo.'"...........

Y tienes razon, es la expresion regular en tu regla, fijate que colocas [1-9] es decir del 1 al 9 y en las que no te funcionan tienen un 0 en el ID no ?

Cambialo a esto:

1
2
3
4
5
6
7
8
9
RewriteEngine On
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^productos/categoria/(\d+)-(.+)$ productos/category.php?id=$1&seo=$2
 
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^productos/detalle/(\d+)-(.+)$ productos/details.php?id=$1&seo=$2

Deberia funcionarte...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Diego
Val: 29
Ha aumentado su posición en 9 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con doble redirección con htaccess y php

Publicado por Diego (45 intervenciones) el 02/05/2017 03:11:30
¡Ha funcionado!

Muchas gracias , el problema era la expresión numérica del htaccess.
Me pondré a estudiar todo lo de htaccess

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar