by:

Was ist ein Redirect Service ?

Ein Redirect oder auch Alias Service ist eine Methode, mit der man aus einer langen Internetadresse, eine gekürzte Form machen kann ...
Bsp.:
Aus
http://maps.google.at/maps?hl=de&ie=UTF8&ll=48.203397,16.373062&spn=0.094503,0.305557&z=12
Wird
http://kickmeto.ath.cx/wien

Nötig wird so ein Service, wenn man bei der Zeilenlänge eingeschränkt ist,
wie etwa in einer eMail, bei einer SMS oder auch bei Twitter.

Was benötigen wir für unseren eigenen Redirect Service ?

Eine möglichst kurze Domain
Einen Webserver mit PHP und mod_rewrite (Apache)
Eine Datenbank (im Beispiel verwende ich MySQL)

Ich habe zum Demonstrieren http://kickmeto.ath.cx/ online gestellt, was
auf folgendem Code basiert.

Zuerst erstellen wir unsere MySQL Tabelle "redirect":

CREATE TABLE `redirect` (
`id` bigint(20) unsigned NOT NULL auto_increment,
`url` text NOT NULL,
`name` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Hier haben wir einen primären Schlüssel (id), die Adresse (url) welche wir in den Namen (name) umwandeln möchten.

Jetzt erstellen wir eine Konfigurationsdatei, in der wir unsere Datenbankparameter, wie user, passwort etc.
reinschreiben:

Code

<?
    /***   mysql connection information   ****/
    /*****************************************/
    $db      = "redirect";
    $db_host = "localhost";
    $db_user = "user";
    $db_pass = "pass";
    $url     = "http://kickmeto.ath.cx/";
    /*****************************************/

?>


Jetzt kommt das Herzstück der Weiterleitung, folgender Script (index.php) übernimmt alle Aufgaben, die wir benötigen

1. Weiterleitung der Kurzadressen
2. Speichern neuer Adressen
3. Fehlerüberprüfung

Code

<?
include("./config.php");
$sOut="";

//wir bauen eine verbindung zur datenbank auf
$connect=@mysql_connect("$db_host", "$db_user", "$db_pass")
or die("<li>Cant connect to: $db_host  with user: $db_user</li>");
@mysql_select_db($db, $connect)or die("Cant select DB");

//im folgenden teil versuchen wir einen redirect in der datenbank zu finden
//wenn nicht das eingabe formular gefragt ist
if($_SERVER[REQUEST_URI]!=="/"){

    $surl=mysql_escape_string(strip_tags(substr($_SERVER[REQUEST_URI], 1)));
    $sql='select url from redirect where name="'.$surl.'" or id="'.$surl.'" limit 1';
    $query=mysql_query($sql);
    $row=mysql_fetch_array($query);
    if($row[url]){
    //hier paasiert die eigentlich weiterleitung
    header("Location: $row[url]");
    }else{
    $sOut.= "Kurzadresse nicht gefunden";
    }

}
//wenn jemand speichern drückt
if($_POST){

    //überprüfe ob die url syntax richtig ist
    if(preg_match("/(((https?)|(ftp))://([-w]+.)+w{2,3}(/[%-w]+(.w{2,})?)*(([w-.?/+@&#;`~=%!]*)(.w{2,})?)*/?)/i", $_POST[url])){
        //maskiere die parameter und speichere sie in die datenbank
        $nurl=mysql_escape_string($_POST[url]);
        if($_POST[name]){
            $sqlstr="'".mysql_escape_string(strip_tags($_POST[name]))."'";
            $name=mysql_escape_string(strip_tags($_POST[name]));
        } else {
            $sqlstr="NULL";
        }
        //hier überprüfen wir ob der name schon existiert
        if(url_exist($name)){
            $sOut="Der Name existiert leider schon, versuchs mit einem anderem.";
        } else {
            //nun schreiben wir die neue kurzurl in die datenbank
            $sql="insert into redirect VALUES ('', '$nurl', $sqlstr)";
            mysql_query($sql);
            $id=mysql_insert_id();        
            $sOut.='Deine Adresse ist nun unter folgender Adresse erreichbar:<br>';
            if($_POST[name]){
                $sOut.='<a href="'.$url.''.$name.'">'.$url.''.$name.'</a> oder <br>';
            }
            $sOut.='<a href="'.$url.''.$id.'">'.$url.''.$id.'</a>';
        }
    }else{
        $sOut.="Bitte check deine URL";
    }
}


function url_exist($url){
    $sql='select url from redirect where name="'.$url.'" or id="'.$url.'" limit 1';
    $query=mysql_query($sql);
    $row=mysql_fetch_row($query);
    if($row[0]){
        return true;
    } else {
        return false;
    }

}


?>
<html>
<head>
<style type="text/css">
body{
    background-color:#000000; 
    color: #ffffff;
    text-align:center;
}
</style>
</head>
<body>
<div class="header">Banner

Short Url Service
</div>
<div class="msg">
<?=$sOut?>
</div>
<form method="post">
<table align="center">
    <tr>
        <td>Url:</td>
        <td><input type="text" name="url" value="http://"></td>
    </tr>
    <tr>
        <td>Name (Optional)</td>
        <td><input type="text" name="name"></td>
    </tr>
        <td> </td>
        <td><input type="submit" name="Save" name="Speichern"></td>
    </tr>
</table>
</form>
</body>
</html>




Das wichtigste noch zum Schluss, die ModRewrite Anweisung (.htaccess), die alle Anfragen umleitet..

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Ich hoffe der Script ist weitgehend selbsterklärend, ansonsten kannst du mich gerne anschreiben, wenn
du Fragen oder Verbesserungsvorschläge hast.

Andreas


http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html



Name:
Hi,
interessanter Beitrag ?ber Redirects.
Diese Mechaniken kannst Du ?brigens auch einsetzen f?r Deine QR-Codes. Das hat den Vorteil, dass die Codes nicht so pixelig sind, weil eben im QR-Code der kurze Redirect (TinyURL) codiert ist. Und nach Code-Scann, und damit Aufruf, wird auf die normale lange (Blog)URL "geredirected".
Hier z.B. unser Blog: http://tagmotion.de/ Darin (in den Codes) ist das sch?n verdeutlich. Das Blog ruft via Plugin unseren Tagserver auf. Und der k?mmert sich um das oben geschilderte Verfahren. Siehe hier: http://www.tagsolute.de/developer/uebersicht.html

Viele Gr??e, Stefan