Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Url amigables dinamicas

hola gente hago una consulta. tengo un sitio de noticias en el cual traigo las notas de la db por id, osea en el index muestro el titulo y la img de la noticia. Para acceder a la noticia linkeo a <a href="nota.php?id=<?php echo $portadita[0];?>" style="color:#000">, donde $portadita[0]; trae el id y direcciona a miweb.com/nota.php?id=

mi archivo .htaccess:
Options +FollowSymLinks
RewriteEngine on
#4 variables
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?id=$2=$3&$4=$5&$6=$7&$8=$9
#3 variables
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?id=$2=$3&$4=$5&$6=$7
#2 variables
Rewriterule ^(.*)/(.*),(.*)/(.*),(.*)/$ $1.php?id=$2=$3&$4=$5
#1 variable
Rewriterule ^(.*)/(.*),(.*)/$ $1.php?id=$2=$3

RewriteRule ^nota/(.+)$ nota.php?id=$1

en el archivo index.php tengo el siguiente codigo:
//Iniciamos o continuamos la sesión encargada de evitar el bucle infinito
session_name("url_amigable");
session_start();
//Almacenamos datos del server, script y variables (pasadas por GET)
$Server=$_SERVER['SERVER_NAME'];
$Script=$_SERVER['PHP_SELF'];
$Variables=$_SERVER['QUERY_STRING'];

//Verificando si tiene variables por GET
//y no se han pasado datos mediante un form por POST
//ya q al redireccionar un post puede ocasionar errores.
//Tambien verificamos que la variable de sesión 'Listo'
//sea diferente a 1, esto nos eviara un bucle infinito.

if(!empty($Variables) && $_SERVER['REQUEST_METHOD']=='GET' && $_SESSION['Listo']!=1){
//Si tiene variables pasadas por GET se procede a hacer el cambio.
//1. Agrupando $Variables por "variable=valor" en el array $Variable.
$Variable=explode("&",$Variables);
//2. Sustituyendo "=" por "," y concadenandolo en variable $Amigable.
for($i=0;$i<count($Variable);$i++){
$Amigable.="/".str_replace("=",",",$Variable[$i]);
}
//3. Quitando la extension ".php" a $Script para simular un directorio.
$Dir=str_replace(".php","",$Script);
//4. Generando la URL Amigable.
$URL_AMIGABLE="http://".$Server.$Dir.$Amigable."/";
//5. Colocando la variable de sesión 'Listo' a 1 para evitar el bucle infinito
// al redireccionar la web.
$_SESSION['Listo']=1;
//6. Redireccionando a la url amigable
header("Location: $URL_AMIGABLE");
//7. Exit hará que culmine hasta este punto el script, si no estuviera 'exit'
// el script continuaría ejecutándose y llegaría hasta el final del mismo, es decir,
// a la parte donde colocamos a la variable de sesión 'Listo' en cero, originandose
// entonces un bucle infinito.
exit;
}
//Cambie $_URL_BASE por la ruta raiz de su web, ya que al simular la url amigable
//directorios, hará que no muestre adecuadamente los origenes de los recursos que
//llama su página web.
$_URL_BASE="http://".$Server."/nota.php";

$portadita[2] me trae el titulo de la noticia.

<a href="nota.php?id=<?php echo $portadita[2];?>" style="color:#000">(linkeo asi para que muestre el titulo de la nota en la url amigable)

esto me devuelve la siguiente url:

miweb.com/nota.php?id=<p>Rastros%20de%20ADN%20en%20la%20víctima</p>

yo lo que quiero es que en vez de mostrar el id muestre el titulo de la nota. pero me trae hasta el html que tiene el titulo en la db.

Si me pueden dar mano, me solucionan un gran dolor de cabeza jeje.

Gracias gente!!!!
Editado
0
Puntos
1237
Visitas
2
Resp
Por Federico hace 29 meses
Principiante

Respuesta #1

Hola buenas es un poco complejo para explicar por aquí pero básicamente lo que tienes que hacer es pasar la url amigable desde el mismo enlace, algo así:
<a href="post/titulo-de-ejemplo-para-post">Titulo de ejemplo para post</a>
despues con htacces enviar el seo que va despues de post/ al ver fichero donde se visualiza el artículo:
RewriteEngine on
RewriteRule ^post/(.+) prueba.php?code=$1
como ves estas enviando el seo por GET a un fichero llamado prueba.php y en ese fichero tendrías que hacer la consulta buscando el campo seo "titulo-de-ejemplo-para-post" en vez de consultar por id.

si no tienes el campo seo en tu base da datos solo tienes que crear una nueva columna y guardar el titulo del post convertido a seo es decir sin espacios etc..

te dejo un enlace a una función que hace exactamente eso generar una url seo a partir de una cadena en tu caso del título http://datoweb.com/post/894-tutorial-crear-url-amigable-con-php

Saludos!
1
Puntos
Por alber hace 29 meses
Administrador

Respuesta #2

yo lo haría así de una manera mas sencilla creo yo, para cualquier duda comenta..
0
Puntos
Por alber hace 29 meses
Administrador

Relaccionados

Para comentar Inicia sesión o Registrate