entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

URLs amigables con htaccess

Hola que tal? Necesito hacer url amigables y si bien me funciona, me gustaría mejorar unos aspectos que no logro mejorar.

Por un lado tengo mi .htaccess y por otro lado los archivos .php

.htaccess:

RewriteEngine on
RewriteBase /MIPROYECTO_PHP/
RewriteRule ^/$ index.php [L]

con esta regla puedo ver MIPROYECTO_PHP/remeras o MIPROYECTO_PHP/equipos, o cualquier categoria, etc

RewriteRule ^([a-zA-Z_-]+)/?$ categoriasver3.php?nombreCateg=$1 [L]

y con esta regla puedo ver los productos: ejemplo -> producto1/celular/

RewriteRule ^producto1/([a-zA-Z_-]+)/?$ producto1/producto1.php?seo=$1

El problema es que yo quisiera que desde las categorias, ej: cuando estoy en remeras/ y me lista los productos pertenecientes a esa categoria...

al ir al link del producto vaya a "remeras/remera-homero", o "remeras/remera-barcelona", etc

Actualmente cuando hago click en el producto me va a producto1/remera-homero.

Cómo puedo hacer para mejorar la regla??

Gracias!

0voto

carlossevi comentado

¿Cada producto tiene una URL productox.php distinta?

0voto

Icefreeze comentado

En realidad hay una página única que se llama producto.php (esta recibe como parámetro un id, ejemplo: producto.php?idProd=35) y para las categorias reemplazo lo siguiente: categoriasVer.php?nombreCateg=$1, esto da por ejemplo /remeras.

Gracias!

0voto

carlossevi comentado

No termino de entender el problema.
/categoria/abc muestra los productos de categoría abc.
/producto/este-producto muestra el producto seleccionado.
¿No dices que ya está funcionando así? ¿Cuál es el problema?

0voto

Icefreeze comentado

El problema es que yo quisiera por ejemplo lo siguiente:

Hoy cuando accedo a /colores me muestra por ejemplo así:
Listado de colores
verde
rojo
azul

Si hago click en "verde", no me lleva a colores/verde, me lleva a producto/verde...y queda mucho mejor que siga la línea de la categoría.

Te copio un ejemplo:
http://www.movenow.com.ar/botitas/bulgaro/

Gracias!

0voto

carlossevi comentado

Pruebo a ver si he entendido bien... ¿Quieres lo siguiente?

/abc > categorias.php?id=$1
/abc/deb > productos.php?id=$1

¿O quieres esta otra opción?

/abc > categorias.php?id=abc
/abc/deb > productos.php?id=deb&cat=abc

0voto

Icefreeze comentado

Supongo que la 2º opción pero usando la variable $1 o $2 sucesivamente.

Yo sé que con esto:

RewriteRule ^([a-zA-Z_-]+)/?$ categoriasver3.php?nombreCateg=$1 [L]

me muestra por ejemplo /colores

Para mostrar los registros de esa página estoy utilizando 2 queries, una que llama a las categorías "select * from categorias where nombreCategoria = '$variable".

y luego otra query que muestra los productos donde el id de la categoria es igual al id de la categoria de arriba

entonces me queda:

/colores

Listado de colores
azul,
blanco,
rojo

Lo que me está faltando es como asociar que esos productos tienen que ser accedidos desde la categoría/sunombre.

Gracias!!

1 Respuesta

1voto

carlossevi Puntos63580

Te pongo un ejemplo para convertir la siguiente URL:

http://domain.com/deb/abc.html

en:

http://domain.com/producto.php?id=deb&cat=abc
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)\.html$ /producto.php?id=$1&cat=$2 [L]

0voto

Icefreeze comentado

Sabes que no logro hacerlo funcionar con mi código...

Te pongo la query que uso para ver los productos.

producto.php

// con esto capturo la variable pasada por get
$colname_productos = "-1";
if (isset($_GET['seo'])) {
  $colname_productos = $_GET['seo'];
}

// con esto selecciono el producto en cuestión
$q_productos = sprintf("SELECT productos.idProd, productos.nombreProd, productos.precioProd, productos.imgProd, productos.seo, productos.idCateg, categorias.idCateg, categorias.nombreCateg FROM productos inner join categorias on productos.idCateg = categorias.idCateg WHERE seo = %s", GetSQLValueString($colname_productos, "text"));

///////////////////

categoriaver.php

// con esto capturo la variable pasada por get
$colname_cat = "-1";
if (isset($_GET['nombreCateg'])) {
  $colname_cat = $_GET['nombreCateg'];
}

// con esto selecciono el la categoría en cuestión
$query_categorias = sprintf("SELECT * FROM categorias WHERE nombreCateg = %s", GetSQLValueString($colname_cat, "text"));

// con esto selecciono los productos correspondientes a la categoría
$query_prod = "SELECT * FROM productos WHERE idCateg = '$sucategoria'";

Gracias.

0voto

carlossevi comentado

Pero @Icefreeze estamos mezclando dos problemas diferentes:

  1. Tener URLs que mediante parámetros GET devuelvan el contenido deseado.
  2. Hacer esas URL accesibles a través de direcciones más amigables mediante reescritura.

Según los comentarios te entendí que estabas abordando el problema 2, es decir, confirmaste que querías convertir:

/abc > categorias.php?id=abc
/abc/deb > producto.php?id=deb&cat=abc

¿Ahora resulta que producto.php?id=deb&cat=abc no devuelve el contenido? Pues es otro problema diferente, ¿no?

0voto

Icefreeze comentado

Sí, lo que sucede es que el ejemplo de /abc/deb > producto.php?id=deb&cat=abc no es exactamente tal cual yo lo estoy escribiendo con mi código. Por eso puse las queries que estoy usando.

Repasando:
RewriteRule ^producto/([a-zA-Z_-]+)/?$ producto/producto.php?seo=$1
Esto me devuelve
/producto/remera-larga/
/producto/camiseta/

RewriteRule ^([a-zA-Z_-]+)/?$ categoriasver.php?nombreCateg=$1 [L]
Esto me devuelve
/remeras
/equipos
/colores

Lo que yo quiero es una regla para que devuelva
/remeras/manga-larga/
/equipos/Barcelona
/colores/amarillo

se entiende? Y eso es lo que no logro hacer.

Gracias!

1voto

carlossevi comentado

Puedes hacer variable la primera parte de la URL pero no utilizarla:

RewriteRule ^([a-zA-Z_-]+)/([a-zA-Z_-]+)/?$ producto/producto.php?seo=$2

0voto

Icefreeze comentado

Funciona!!!
Muchas gracias.
Ahora puedo acceder a por ejemplo /remeras/remera-larga.

Hace poco que me registré en este sitio. Debo cerrar la pregunta, o queda así simplemente?
Gracias!!

1voto

carlossevi comentado

En la respuesta tienes un botón para seleccionarla como correcta.

1voto

Icefreeze comentado

Gracias carlossevi y gracias a Peter!
Ambos me ayudaron con este problema.

Era un tema que hacía bastante quería solucionar y no daba con la tecla.
Y queda mucho mejor las url amigables mas allá del posicionamiento en google, queda justamente mas amigable para el usuario.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta