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:
en el archivo index.php tengo el siguiente codigo:
$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
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
Puntos
3310
Visitas
Visitas
2
Resp
Resp
Por Federico hace 101 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í:
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 https://datoweb.com/post/894-tutorial-crear-url-amigable-con-php
Saludos!
<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=$1como 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 https://datoweb.com/post/894-tutorial-crear-url-amigable-con-php
Saludos!
1
Puntos
Puntos
Por alber hace 101 meses
Administrador
Respuesta #2
yo lo haría así de una manera mas sencilla creo yo, para cualquier duda comenta..
0
Puntos
Puntos
Por alber hace 101 meses
Administrador