Foros del Web » Programando para Internet » PHP »

Urls amigables con htaccess

Estas en el tema de Urls amigables con htaccess en el foro de PHP en Foros del Web. Hola Después de unos meses aprendiendo php y mysql he conseguido realizar un script pero me falta el tema de las urls amigables. Leí el ...
  #1 (permalink)  
Antiguo 05/09/2009, 07:21
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Urls amigables con htaccess

Hola

Después de unos meses aprendiendo php y mysql he conseguido realizar un script pero me falta el tema de las urls amigables. Leí el artículo w ww.desarrolloweb.com/manuales/htaccess-para-urls-amigables.html pero no acabo de entenderlo :(

Lo que quiero conseguir es lo siguiente:

- Que "test.php?categoria=$categoria" redireccione a "test-$categoria.html" o si no a "test/$categoria".

- Que "hacer.php?test=$categoria" redireccione a "hacer/test-$test.html" o si no a "hacer/test/$test".

En la variable $categoría se almacena un texto y en la $test un número.

Creo que ninguno de los ejemplos de los artículos de desarrolloweb me sirven, por eso recurro a vosotros, me echais una mano?

Gracias y un saludo
  #2 (permalink)  
Antiguo 05/09/2009, 07:47
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Urls amigables con htaccess

mmm mira no se si hace asi pero es como yo lo hago y funciona
primero si vas a comvertir una ur larga del tipo:

subcat.php?categorias_id=$2&usuario=listar

tendras que usar un convertidor para transformar la url a lo que quieras por ejemplo tomando el artiuculo + el usuario en el ejemplo anterior seria:

categoria2-el-nombre-del-usuario.html <-- pero esto es mas complicado de explicar asi que voy mostrarte una forma de hacer lo que tu necesitas suponiendo que $test. es numerico haz esto crea un archivo .htaccess y coloca esto

Código PHP:
Options +FollowSymLinks

RewriteEngine on  


Rewriterule 
^tes-categoria_(.*).htmlest.php?categoria=$
eso deberia de funcionar pero ahora recuerda que debes cambiar los links donde aparecen en tu pagina test.php?categoria=$categoria
cambia ahora por <a href=" tes-categoria_<?php echo $categoria ?>.html"> aca categoria</a>

bueno espero que te sirva saludos!!!
  #3 (permalink)  
Antiguo 05/09/2009, 12:52
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Urls amigables con htaccess

Hola zerpico_01

Muchas gracias por tu respuesta, el código funciona pero lo que conseguí es que "test.php?categoria=$categoria" redireccione a "test-categoria_$categoria.html" y, en realidad yo quería que fuese "test-categoria.html" pero no pasa nada, con unos retoques lo he conseguido:

Rewriterule ^test-(.*).html$ test.php?categoria=$1

Ahora bien, como hay algunas categorías que se llaman por ejemplo "Coche (B)" (sin comillas) pues me gustaría que los espacios los sustituyese por guiones y las mayúsculas por minúsculas, eso cómo se podría hacer?

Un saludo ;)
  #4 (permalink)  
Antiguo 05/09/2009, 13:43
 
Fecha de Ingreso: septiembre-2008
Ubicación: Lanzarote, Canarias
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 41
Respuesta: Urls amigables con htaccess

Con php tienes que hacerlo, yo hice esta función:

Código:
function urls_amigables($s) {
    $p = array('ú','á','Á',':','/','É','Í','Ó','Ú','é','ñ','Ñ','í','ó',' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9',' 0',' - ',' ','#','(',')','[',']','.','<','>','{','}','?','¿','!','¡','&',"'",'"',',');
    $r = array('u','a','A','','-','e','i','o','u','e','n','n','i','o','1','2','3','4','5','6','7','8','9','0','-','-','','','','','','','','','','','','','','','y','','','');
    $s=str_replace($p, $r, $s);
	$s = strtolower($s);
	return $s;
}
utilizala en la variable urls_amigables($variable) y problema resuelto.
  #5 (permalink)  
Antiguo 05/09/2009, 22:19
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Urls amigables con htaccess

eso es mas complejo, necesito mas informacion para poder ayudarte, por ejemplo algun link completo que linkee a la pagina test.php y algo de codigo para ver como toma los links con test.php?categoria=xxxx

tienes que entender que para generar una url amigable no es solo toquetear el htaccess si que tambien debes modificar los links del script para cargarlos con una funcion similar a la que a post codig

saludos!!
  #6 (permalink)  
Antiguo 06/09/2009, 02:55
Avatar de Alvarix18  
Fecha de Ingreso: marzo-2008
Ubicación: Valencia
Mensajes: 200
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Urls amigables con htaccess

Copia y pega en tu .htaccess:

Código:
Options +FollowSymLinks
RewriteEngine on

RewriteRule ^test-(.*)\.html$ test.php?categoria=$1 [L,QSA]
Ahora cambias los enlaces y los pones hacia "/test-CATEGORIA.html"

Espero que te funcione!
__________________
Comprar consolas en PideConsolas.es
Liberar moviles en PideConsolas.es
  #7 (permalink)  
Antiguo 06/09/2009, 02:56
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Urls amigables con htaccess

Hola

Os responderé a los dos, gracias por ayudarme.

@codig0: esos arrays se supone que sustituyen por ejemplo "ú" por "u" y "Á" por "A"?

Dices "utilizala en la variable urls_amigables($variable) y problema resuelto. " pero no sé a qué te refieres, hay que llamar la función esa en el .htaccess me imagino, de qué forma?

@zerpico_01: actualmente tengo la página subida a una carpeta de pruebas del dominio que usaré: testautomovil .com/pruebas/index.php

El sistema lo tengo montado así:

- Primero la index.php hace un include del archivo categorias.php y con un for estilo como éste y se muestran los resultados (sale un fondo verde raro pero lo tengo arreglado ya):

Código:
for ($i=0; $i <$num_results; $i++)
{
	$row = mysql_fetch_array($result);
	echo '<p><li><strong>'.($i+1).'. ';
	echo '<a href="test.php?categoria='.$row['categoria_test'].'">'.$row['categoria_test'].'</a>';
	echo '</strong></li></p>';
}
- Los enlaces del for son los que van a la página test.php que a su vez crea los enlaces "Test 1, 2, 3" a hacer.php con otro for como éste:

Código:
for ($i=0; $i <$num_results; $i++)
{
	$j=$i+1;
	$row = mysql_fetch_array($result);
	echo '<p><strong>';
	echo '<a href="hacer.php?test='.$row['test'].'">Test '.$j.'</a>'; 
	echo '</strong></p>';
}
Espero que te sirva.

Edito para responder a Alvarix18:

Qué diferencia debería notar con tu código con respecto a:

Código:
Options +FollowSymLinks
RewriteEngine on

RewriteRule ^test-(.*)\.html$ test.php?categoria=$1
Yo tengo los enlaces así ahora mismo: echo '<a href="test-'.$row['categoria_test'].'.html">'.$row['categoria_test'].'</a>';

Y se me crean de la siguiente forma: test-Coche (B).html

Sabes cómo sustituir esa mayúscula por una minúscula, los espacios por guiones y la tilde sacarla?

Gracias alvarix.

Un saludo a los tres ;)

Última edición por foley; 06/09/2009 a las 03:08
  #8 (permalink)  
Antiguo 06/09/2009, 05:24
 
Fecha de Ingreso: septiembre-2008
Ubicación: Lanzarote, Canarias
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 41
Respuesta: Urls amigables con htaccess

No hay que llamar a ningún archivo desde el htaccess... eso es PHP, en vez de esto:

Código:
echo '<a href="test-'.$row['categoria_test'].'.html">'.$row['categoria_test'].'</a>';
pones esto:

Código:
echo '<a href="test-'.urls_amigables($row['categoria_test']).'.html">'.$row['categoria_test'].'</a>';
y ya cambia la url y funcionará, luego a la hora de comparar el nombre de la categoría en el mysql_query tendrás un where cat='$_GET['tal']'. pues una de dos, le pones where cat='".urls_amigables($_GET['tal'])."' o le pasas por url el id de la categoría también y lo compruebas por el id, yo te recomiendo la segunda opción, pero como veas.

La función lo que hace es eliminar los caracteres de $p por los de $r y strtolower eliminar las mayúsculas.

Última edición por codig0; 06/09/2009 a las 05:31
  #9 (permalink)  
Antiguo 06/09/2009, 06:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Urls amigables con htaccess

Muchas gracias por tu ayuda codig0

La funcion funciona perfecta, pero tengo problemas con la query, te explico:

Yo antes usaba
Código:
$query = "select distinct test from preguntas where ".categoria_test." like '".$categoria."'";
y he probado de esta forma pero nada:

Código:
$query = "select distinct test from preguntas where ".categoria_test." like '".urls_amigables($_GET['$categoria'])."'";
También usando = en vez de like (realmente no sé cuál es la diferencia, yo usaba like):

Código:
$query = "select distinct test from preguntas where categoria_test='".urls_amigables($_GET['$categoria'])."'";
Un apunte: al principio del archivo donde salen los tests de la categoria seleccionada ya recibo la variable por $categoria por get, probé a ponerlo como comentario pero tampoco.

Si necesitas que te pase algo más avísame ;)

Un saludo
  #10 (permalink)  
Antiguo 06/09/2009, 08:59
 
Fecha de Ingreso: septiembre-2008
Ubicación: Lanzarote, Canarias
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 41
Respuesta: Urls amigables con htaccess

usa where y no like para eso y mejor pasa también el id de la categoría, para no tener problemas, por que así como lo haces no funcionaría, no lo pensé bien.
  #11 (permalink)  
Antiguo 06/09/2009, 09:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Urls amigables con htaccess

Hola otra vez codig0

perdona si soy algo pesado con esto pero soy algo principiante y bueno, nunca había trabajado con funciones.

Entonces dices que use where y no like? Pero entonces la query cómo quedaría?

Así?
Código:
$query = "select distinct test from preguntas where categoria_test='".urls_amigables('$categoria')."'";
Y a qué te refieres con que pase también la id de la categoría?

Gracias, un saludo ;)
  #12 (permalink)  
Antiguo 06/09/2009, 10:17
 
Fecha de Ingreso: septiembre-2008
Ubicación: Lanzarote, Canarias
Mensajes: 486
Antigüedad: 15 años, 7 meses
Puntos: 41
Respuesta: Urls amigables con htaccess

si, me refiero a que pases el numero que identifica que categoría es... supongo que en la tabla donde almacenas las categorías tendrás dos campos, id y nombre.
  #13 (permalink)  
Antiguo 06/09/2009, 10:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Urls amigables con htaccess

Pues la verdad es que no tengo nada así.

Yo uso una tabla llamada preguntas, y luego tengo otras tablas pero bueno esas no las uso porque es para más adelante poder ampliar un poco el script.

La tabla preguntas tiene los siguientes campos:

clave_identifi
numpre
test
categoria_test
subcategoria
pregunta
respuesta_correcta
respuesta_a
respuesta_b
respuesta_c
respuesta_d
nombre
tipo
imagen
explicacion

Se peude hacer igualmente?

Gracias ;)
  #14 (permalink)  
Antiguo 07/09/2009, 04:56
Avatar de Alvarix18  
Fecha de Ingreso: marzo-2008
Ubicación: Valencia
Mensajes: 200
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Urls amigables con htaccess

Añádele con el phpmyadmin un nuevo campo que sea "id", bigint(7) NOT NULL auto_increment
__________________
Comprar consolas en PideConsolas.es
Liberar moviles en PideConsolas.es
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 16:08.