Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/07/2014, 20:05
Avatar de epinaresg
epinaresg
 
Fecha de Ingreso: noviembre-2011
Mensajes: 13
Antigüedad: 12 años, 6 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