PHP - Como crear un acortador de urls en php sobre apache

   
Vista:
Imágen de perfil de xve

Como crear un acortador de urls en php sobre apache

Publicado por xve (5518 intervenciones) el 17/07/2014 08:39:27
Hola, voy a intentar explicar como hacer un acortador de urls similar al de http://adf.ly/27Mjv o http://bit.ly/1pIvCJk.

Primeramente, debemos te intentar tener un dominio lo mas corto posible... para este ejemplo, interpreto que tenemos el dominio link.com

En este dominio link.com en el cual le van a llegar urls del estilo: link.com/asd4d donde "asd4d" tiene que hacer referencia a una pagina web de internet.

En el servidor donde esta el dominio link.com, tienes que tener un archivo .htaccess del tipo:
1
2
3
4
5
6
7
RewriteEngine On
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
 
RewriteRule ^(.*)$ pagina.php?u=$1 [L,NC]

Que lo que hace, es coger esa cadena (asd4d) y enviarla al archivo pagina.php por GET.

Ahora en la pagina.php, nos llegara por GET la variable $_GET["u"] que contendrá la cadena "asd4d"

El siguiente paso, es buscar en una base de datos esa cadena para obtener la url real de internet... imaginemos que esa url es: http://www.lawebdelprogramador.com

Ahora ya sabemos que tenemos que hacer una redirección 301 a http://www.lawebdelprogramador.com.

En este punto, podemos hacer dos cosas, mostrar una pagina web con información o publicidad, para posteriormente con un timeout redireccionar a la página en cuestión, o esperar a que el usuario pulse sobre un botón.
Para nuestro ejemplo, queremos que sea una redirección automática y sin tiempo de espera.

Desde nuestra pagina.php, tendrás que tener el código de buscar la url vinculada a "asd4d" y posteriormente hacer el salto con algo como:
1
2
3
4
<?php
header("HTTP/1.1 301 Moved Permanently");
header("location:http://www.lawebdelprogramador.com");
?>

Espero que os sirva de ayuda...


Para el que este interesado, estas lineas del .htaccess quieren decir:
RewriteCond %{REQUEST_FILENAME} !-f # si no es un archivo existente en el servidor
RewriteCond %{REQUEST_FILENAME} !-d # si no es una carpeta existente en el servidor
RewriteCond %{REQUEST_FILENAME} !-l # si no es un link existente en el servidor
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder