Foros del Web » Programando para Internet » PHP »

url amigable con redireccion

Estas en el tema de url amigable con redireccion en el foro de PHP en Foros del Web. Hola amigos, primero que todo un cordial saludos espero les este yendo bien. ahora escribo por aqui porque me he quedado barado en un proyecto ...
  #1 (permalink)  
Antiguo 21/07/2014, 16:42
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
url amigable con redireccion

Hola amigos, primero que todo un cordial saludos espero les este yendo bien. ahora escribo por aqui porque me he quedado barado en un proyecto que estoy creando y necesito ayuda, y se que aqui me daran la respuesta a mi problema.

estoy creando un sitio de anuncios donde el usuario logicamente crea su anuncio y lo publica
lo que quiero hacer es con las url esto:
tengo una base de datos donde se guarda la informacion como titulos descripciones imagenes etc.

en el formulario de creacion el usuario tiene un campo que lo llamo enlace
y en la BD se guarda como enlace ese enlace es unico para cada anuncio el usuario lo coloca, no se repite nunca, ejemplo el usuario esta creando un anuncio con lo siguiente:

Titulo: Este es mi primer anuncio en mi portal efren315
enlace: efren315

esto se guarda en la base de datos: campo:titulo y campo: enlace

ahora lo que quiero hacer es que al momento de ingresar la url:

www.misitio.com/aqui va el enlace que coloca el usuario -..... es decir

www.misitio.com/efren315 que es el ejemplo que estoy dando

y que al momento de ingresar esa url www.misitio.com/efren315 este se redireccione a la siguiente url

www.misitio.com/mas el titulo del anuncio que en este ejemplo seria

www.misitio.com/Este_es _mi _primer _anuncio _en _mi _portal _efren315.html

y se carge el contenido del anuncio guardado en la base de datos.


aqui esta el problema que no encuentro como logra hacerlo si alguien con mas conocimiento que yo me puede dar un ejemplo o decirme como hacerlo se lo agradecería.

hasta el momento tengo esta funcion para las mayusculas y caracteres especiales
<?php
function urls_amigables($url) {
$url = strtolower($url);
$find = array('á', 'é', 'í', 'ó', 'ú', 'ñ');
$repl = array('a', 'e', 'i', 'o', 'u', 'n');
$url = str_replace ($find, $repl, $url);
$find = array(' ', '&', '\r\n', '\n', '+');
$url = str_replace ($find, '-', $url);
$find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
$repl = array('', '-', '');
$url = preg_replace ($find, $repl, $url);
return $url;
}
?>
  #2 (permalink)  
Antiguo 21/07/2014, 20:05
Avatar de epinaresg  
Fecha de Ingreso: noviembre-2011
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: url amigable con redireccion

Para poder lograr la funcionalidad que mencionas deberás de trabajar con url's amigables con htaccess.

Archivo ".htaccess"
Código PHP:

RewriteEngine on

RewriteCond 
%{REQUEST_FILENAME} !-f
RewriteCond 
%{REQUEST_FILENAME} !-d
RewriteRule 
.* index.php?enlace=$[PT,L
Este archivo deberá estar en la raíz del proyecto y funcionaria de la siguiente manera:

Como lo ingresarías en tu browser
http://www.miweb.com/enlace1

Como lo interpreta el servidor
http://www.miweb.com/index.php?enlace=/enlace1

con lo cual con un simple $_GET['enlace'] podrás obtener el parametro que pasas por la url.

Para captura el enlace y luego redireccionarlo lo podríamos hacer de la siguiente manera.

Recomendaria que al momento de registrar un nuevo anuncio generaras y almacenaras la url en la base de datos, ademas de validar que sea unica.

Archivo "index.php"
Código PHP:

<?php

if (isset($_GET['enlace']) && !empty($_GET['enlace'])) {

    
$enlaces_string trim(str_replace('/'' '$_GET['enlace']));

    
$enlaces_array explode(' '$enlaces_string);

    
$enlace $enlaces_array[0];


    
$actual_url 'http://' $_SERVER['HTTP_HOST'] . '/';


    
$registros = array(
        array(
            
'enlace' => 'enlace1',
            
'titulo' => 'este es el enlace 1',
            
'url_amigable' => urls_amigables('este es el enlace 1') . '.html'
        
),
        array(
            
'enlace' => 'enlace2',
            
'titulo' => 'este es el enlace 2',
            
'url_amigable' => urls_amigables('este es el enlace 2') . '.html'
        
)
    );

    
$data_a_mostrar = array();

    for (
$i 0$i count($registros); $i++) {


        if (
$registros[$i]['url_amigable'] === $enlace)
            
$data_a_mostrar $registros[$i];

        if (
$registros[$i]['enlace'] === $enlace)
            
header('Location: ' $registros[$i]['url_amigable']);
    }


    if (!empty(
$data_a_mostrar)) {

        echo 
'<pre>';
        
print_r($data_a_mostrar);
        echo 
'</pre>';
    } else {
        echo 
'ERROR 404';
    }
}

function 
urls_amigables($url) {
    
$url strtolower($url);
    
$find = array('á''é''í''ó''ú''ñ');
    
$repl = array('a''e''i''o''u''n');
    
$url str_replace($find$repl$url);
    
$find = array(' ''&''\r\n''\n''+');
    
$url str_replace($find'-'$url);
    
$find = array('/[^a-z0-9\-<>]/''/[\-]+/''/<[^>]*>/');
    
$repl = array('''-''');
    
$url preg_replace($find$repl$url);
    return 
$url;
}
Con este codigo capturo el parametro "/enlace1" de la url "http://www.miweb.com/enlace1", luego lo limpio y hago una busqueda en un arreglo de datos ( en tu caso seria una consulta a la base de datos en base al enlace capturado de la url ).

Obtienes la url amigable de la base de datos, armas y redireccionas a la nueva url que seria "http://www.miweb.com/este-es-el-enlace-1.html", donde este enlace funcionaria de la misma manera. Capturas el parámetro que en este caso seria "/este-es-el-enlace-1.html", lo limpias y lo buscas en la base de datos.

Si existe se mostrara la información del anuncio, caso contrario mostrar un error 404.

Saludos
  #3 (permalink)  
Antiguo 22/07/2014, 12:09
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: url amigable con redireccion

Cita:
Iniciado por epinaresg Ver Mensaje
Para poder lograr la funcionalidad que mencionas deberás de trabajar con url's amigables con htaccess.

Archivo ".htaccess"
Código PHP:

RewriteEngine on

RewriteCond 
%{REQUEST_FILENAME} !-f
RewriteCond 
%{REQUEST_FILENAME} !-d
RewriteRule 
.* index.php?enlace=$[PT,L
Este archivo deberá estar en la raíz del proyecto y funcionaria de la siguiente manera:

Como lo ingresarías en tu browser
http://www.miweb.com/enlace1

Como lo interpreta el servidor
http://www.miweb.com/index.php?enlace=/enlace1

con lo cual con un simple $_GET['enlace'] podrás obtener el parametro que pasas por la url.

Para captura el enlace y luego redireccionarlo lo podríamos hacer de la siguiente manera.

Recomendaria que al momento de registrar un nuevo anuncio generaras y almacenaras la url en la base de datos, ademas de validar que sea unica.

Archivo "index.php"
Código PHP:

<?php

if (isset($_GET['enlace']) && !empty($_GET['enlace'])) {

    
$enlaces_string trim(str_replace('/'' '$_GET['enlace']));

    
$enlaces_array explode(' '$enlaces_string);

    
$enlace $enlaces_array[0];


    
$actual_url 'http://' $_SERVER['HTTP_HOST'] . '/';


    
$registros = array(
        array(
            
'enlace' => 'enlace1',
            
'titulo' => 'este es el enlace 1',
            
'url_amigable' => urls_amigables('este es el enlace 1') . '.html'
        
),
        array(
            
'enlace' => 'enlace2',
            
'titulo' => 'este es el enlace 2',
            
'url_amigable' => urls_amigables('este es el enlace 2') . '.html'
        
)
    );

    
$data_a_mostrar = array();

    for (
$i 0$i count($registros); $i++) {


        if (
$registros[$i]['url_amigable'] === $enlace)
            
$data_a_mostrar $registros[$i];

        if (
$registros[$i]['enlace'] === $enlace)
            
header('Location: ' $registros[$i]['url_amigable']);
    }


    if (!empty(
$data_a_mostrar)) {

        echo 
'<pre>';
        
print_r($data_a_mostrar);
        echo 
'</pre>';
    } else {
        echo 
'ERROR 404';
    }
}

function 
urls_amigables($url) {
    
$url strtolower($url);
    
$find = array('á''é''í''ó''ú''ñ');
    
$repl = array('a''e''i''o''u''n');
    
$url str_replace($find$repl$url);
    
$find = array(' ''&''\r\n''\n''+');
    
$url str_replace($find'-'$url);
    
$find = array('/[^a-z0-9\-<>]/''/[\-]+/''/<[^>]*>/');
    
$repl = array('''-''');
    
$url preg_replace($find$repl$url);
    return 
$url;
}
Con este codigo capturo el parametro "/enlace1" de la url "http://www.miweb.com/enlace1", luego lo limpio y hago una busqueda en un arreglo de datos ( en tu caso seria una consulta a la base de datos en base al enlace capturado de la url ).

Obtienes la url amigable de la base de datos, armas y redireccionas a la nueva url que seria "http://www.miweb.com/este-es-el-enlace-1.html", donde este enlace funcionaria de la misma manera. Capturas el parámetro que en este caso seria "/este-es-el-enlace-1.html", lo limpias y lo buscas en la base de datos.

Si existe se mostrara la información del anuncio, caso contrario mostrar un error 404.

Saludos

Hola amigo gracias por responder ya aplique tu ejemplo y todo va bien como tu lo colocastes pero al momento de colocar la variable que contiene el titulo me tira el error 404. y no entiendo el xq?

tengo lo siguiente
Código PHP:
<?php
$elenlace
=$_GET['enlace'];
require(
'config.php');
$tabla mysql_query("SELECT * FROM tb_pre_ads WHERE link='$elenlace'");
mysql_close($con);
while (
$registro mysql_fetch_array($tabla)) {
$link=$registro['link']; // obtengo el enlace del anuncio
$titulo=$registro['titulo'];// obtengo el titulo del anuncio
}

if (isset(
$_GET['enlace']) && !empty($_GET['enlace'])) { 

    
$enlaces_string trim(str_replace('/'' '$_GET['enlace'])); 

    
$enlaces_array explode(' '$enlaces_string); 

    
$enlace $enlaces_array[0]; 


    
$actual_url 'http://' $_SERVER['HTTP_HOST'] . '/'


    
$registros = array( 
        array( 
            
'enlace' => ''.$link.''
            
'titulo' => ''.$titulo.''
            
'url_amigable' => urls_amigables(''.$titulo.'') . '.html'  // en esta parte si coloco la variable '$titulo' la url se muestra correctamente www.misitioweb.com/y el titulo.html pero me imprime el error 404 y no me carga el contenido
        
), 
        array( 
            
'enlace' => 'enlace2'
            
'titulo' => 'este es el enlace 2'
            
'url_amigable' => urls_amigables('este es el enlace 2') . '.html' 
        

    ); 

    
$data_a_mostrar = array(); 

    for (
$i 0$i count($registros); $i++) { 


        if (
$registros[$i]['url_amigable'] === $enlace
            
$data_a_mostrar $registros[$i]; 

        if (
$registros[$i]['enlace'] === $enlace
            
header('Location: ' $registros[$i]['url_amigable']); 
    } 


    if (!empty(
$data_a_mostrar)) { 

        echo 
'<pre>'
        
print_r($data_a_mostrar); 
        echo 
'</pre>'
    } else { 
        echo 
'ERROR 404'
    } 


function 
urls_amigables($url) { 
    
$url strtolower($url); 
    
$find = array('á''é''í''ó''ú''ñ'); 
    
$repl = array('a''e''i''o''u''n'); 
    
$url str_replace($find$repl$url); 
    
$find = array(' ''&''\r\n''\n''+'); 
    
$url str_replace($find'-'$url); 
    
$find = array('/[^a-z0-9\-<>]/''/[\-]+/''/<[^>]*>/'); 
    
$repl = array('''-'''); 
    
$url preg_replace($find$repl$url); 
    return 
$url
}
Como ves no se por que sera em ayudas alli xfa, ya que si llamo al enlace2 si me imprime el array pero si llamo con el link el url si cambia pero me tira el error 404 y no se el xq.
  #4 (permalink)  
Antiguo 22/07/2014, 15:15
Avatar de epinaresg  
Fecha de Ingreso: noviembre-2011
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: url amigable con redireccion

El código que te deje era de un ejemplo funcional de la duda que tenias, no tenias que usarlo tal cual =), mas bien debías adaptarlo a tu código.

Aqui te lo dejo como talvez debería quedar, eso si vas a tener que almacenar la url amigable de cada anuncio en tu tabla anuncios.

Si tu titulo es "Este es mi anuncio numero 1", usando tu función 'urls_amigables()' deberás generar lo siguiente 'este-es-mi-anuncio-numero-1.html' y almacenarlo.

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (isset($_GET['enlace']) && !empty($_GET['enlace'])) {
  4.  
  5.     $elenlace = $_GET['enlace'];
  6.     $enlaces_string = trim(str_replace('/', ' ', $elenlace));
  7.  
  8.     $enlaces_array = explode(' ', $enlaces_string);
  9.  
  10.     $enlace = $enlaces_array[0];
  11.  
  12.     require('config.php');
  13.     $tabla = mysql_query("SELECT * FROM tb_pre_ads WHERE link='$enlace'");
  14.  
  15.     mysql_close($con);
  16.     $registro = mysql_fetch_assoc($tabla);
  17.  
  18.     if (!empty($registro)) {
  19.  
  20.         $link = $registro['link']; // obtengo el enlace del anuncio
  21.         $titulo = $registro['titulo']; // obtengo el titulo del anuncio
  22.  
  23.         $url_amigable = $registro['url_amigable']; // Al registrar tu anuncio genera la url amigable del anuncio con tu function urls_amigables() y almacenala en tu tabla (va a ser necesario)
  24.  
  25.         if ($link === $enlace)
  26.             header('Location: ' . $url_amigable);
  27.         else if ($url_amigable === $enlace) {
  28.  
  29.             // Aqui cargarias la vista o datos a mostrar del anuncio
  30.  
  31.             echo $titulo;
  32.         }
  33.     } else {
  34.         die('ERROR 404 - Pagina no encontrada');
  35.     }
  36. }

Última edición por epinaresg; 22/07/2014 a las 15:21
  #5 (permalink)  
Antiguo 22/07/2014, 19:41
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: url amigable con redireccion

Cita:
Iniciado por epinaresg Ver Mensaje
El código que te deje era de un ejemplo funcional de la duda que tenias, no tenias que usarlo tal cual =), mas bien debías adaptarlo a tu código.

Aqui te lo dejo como talvez debería quedar, eso si vas a tener que almacenar la url amigable de cada anuncio en tu tabla anuncios.

Si tu titulo es "Este es mi anuncio numero 1", usando tu función 'urls_amigables()' deberás generar lo siguiente 'este-es-mi-anuncio-numero-1.html' y almacenarlo.

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (isset($_GET['enlace']) && !empty($_GET['enlace'])) {
  4.  
  5.     $elenlace = $_GET['enlace'];
  6.     $enlaces_string = trim(str_replace('/', ' ', $elenlace));
  7.  
  8.     $enlaces_array = explode(' ', $enlaces_string);
  9.  
  10.     $enlace = $enlaces_array[0];
  11.  
  12.     require('config.php');
  13.     $tabla = mysql_query("SELECT * FROM tb_pre_ads WHERE link='$enlace'");
  14.  
  15.     mysql_close($con);
  16.     $registro = mysql_fetch_assoc($tabla);
  17.  
  18.     if (!empty($registro)) {
  19.  
  20.         $link = $registro['link']; // obtengo el enlace del anuncio
  21.         $titulo = $registro['titulo']; // obtengo el titulo del anuncio
  22.  
  23.         $url_amigable = $registro['url_amigable']; // Al registrar tu anuncio genera la url amigable del anuncio con tu function urls_amigables() y almacenala en tu tabla (va a ser necesario)
  24.  
  25.         if ($link === $enlace)
  26.             header('Location: ' . $url_amigable);
  27.         else if ($url_amigable === $enlace) {
  28.  
  29.             // Aqui cargarias la vista o datos a mostrar del anuncio
  30.  
  31.             echo $titulo;
  32.         }
  33.     } else {
  34.         die('ERROR 404 - Pagina no encontrada');
  35.     }
  36. }
Hola amigo, copie tal cual cree el campo url_amigable y guarde alli. pero igual me sigue mostrando el error 404.
  #6 (permalink)  
Antiguo 22/07/2014, 22:28
Avatar de epinaresg  
Fecha de Ingreso: noviembre-2011
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: url amigable con redireccion

Revisando el código nuevamente me percate de un error, aquí lo dejo corregido

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (isset($_GET['enlace']) && !empty($_GET['enlace'])) {
  4.  
  5.     $elenlace = $_GET['enlace'];
  6.     $enlaces_string = trim(str_replace('/', ' ', $elenlace));
  7.  
  8.     $enlaces_array = explode(' ', $enlaces_string);
  9.  
  10.     $enlace = $enlaces_array[0];
  11.  
  12.     require('config.php');
  13.     $tabla = mysql_query("SELECT * FROM tb_pre_ads WHERE link='$enlace'");
  14.  
  15.     mysql_close($con);
  16.     $registro = mysql_fetch_assoc($tabla);
  17.  
  18.     // Verifica si es la url con el enlace
  19.     if (!empty($registro)) {
  20.  
  21.         $link = $registro['link']; // obtengo el enlace del anuncio
  22.         $url_amigable = $registro['url_amigable']; // Al registrar tu anuncio genera la url amigable del anuncio con tu function urls_amigables() y almacenala en tu tabla (va a ser necesario)
  23.  
  24.         if ($link === $enlace)
  25.             header('Location: ' . $url_amigable);
  26.     } else
  27.     // Verifica si es la url amigable
  28.     {
  29.         $tabla = mysql_query("SELECT * FROM tb_pre_ads WHERE url_amigable='$enlace'");
  30.      
  31.         mysql_close($con);
  32.         $registro = mysql_fetch_assoc($tabla);
  33.    
  34.          if (!empty($registro)) {
  35.             echo '<pre>';
  36.             print_r($registro);
  37.             echo '</pre>';
  38.          }else{
  39.             die('ERROR 404')
  40.          }
  41.  
  42.     }
  43. }
  #7 (permalink)  
Antiguo 24/07/2014, 17:24
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: url amigable con redireccion

Cita:
Iniciado por epinaresg Ver Mensaje
Revisando el código nuevamente me percate de un error, aquí lo dejo corregido

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (isset($_GET['enlace']) && !empty($_GET['enlace'])) {
  4.  
  5.     $elenlace = $_GET['enlace'];
  6.     $enlaces_string = trim(str_replace('/', ' ', $elenlace));
  7.  
  8.     $enlaces_array = explode(' ', $enlaces_string);
  9.  
  10.     $enlace = $enlaces_array[0];
  11.  
  12.     require('config.php');
  13.     $tabla = mysql_query("SELECT * FROM tb_pre_ads WHERE link='$enlace'");
  14.  
  15.     mysql_close($con);
  16.     $registro = mysql_fetch_assoc($tabla);
  17.  
  18.     // Verifica si es la url con el enlace
  19.     if (!empty($registro)) {
  20.  
  21.         $link = $registro['link']; // obtengo el enlace del anuncio
  22.         $url_amigable = $registro['url_amigable']; // Al registrar tu anuncio genera la url amigable del anuncio con tu function urls_amigables() y almacenala en tu tabla (va a ser necesario)
  23.  
  24.         if ($link === $enlace)
  25.             header('Location: ' . $url_amigable);
  26.     } else
  27.     // Verifica si es la url amigable
  28.     {
  29.         $tabla = mysql_query("SELECT * FROM tb_pre_ads WHERE url_amigable='$enlace'");
  30.      
  31.         mysql_close($con);
  32.         $registro = mysql_fetch_assoc($tabla);
  33.    
  34.          if (!empty($registro)) {
  35.             echo '<pre>';
  36.             print_r($registro);
  37.             echo '</pre>';
  38.          }else{
  39.             die('ERROR 404')
  40.          }
  41.  
  42.     }
  43. }
Que tal amigo gracias por tu porte y tu ayuda ahora si me funciona bien, estube haciendo pruebas y todo bien. encontre fue un error al colocar el enlace porque si coloco www.misitio.com/enlace si funciona y me redirecciona hacia la url amigable y me muestra el anuncio. pero si coloco www.misitio.com/enlace/ con barra al final me redireciona pero de la siguiente manera www.misitio.com/enlace/y la url amigable.html estube intentando con el .htaccess pero no logre

Etiquetas: formulario, html, redireccion, url
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 17:27.