Ver Mensaje Individual
  #3 (permalink)  
Antiguo 22/07/2014, 12:09
efren315
 
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.