kostenloser Webspace werbefrei: lima-city


Linkweiterleitung

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    Hallo Lima-city,
    Ich suche ein script, mit dem man auf einer meiner webseiten einen langen link eingeben kann.
    Dieser wird dann z.B in einer MYSQL-Datenbank gespeichert und einer "Weiterleitungsadresse" hinzugefügt.


    Beispiel:

    Du möchtest ein Freund deine Webseite zeigen, er soll aber nicht den ganzen Link

    http://www.arcor.de/Users/Nick/home/php/webseiten/index.php

    eingeben müssen. Also geht er auf meine Homepage, gibt dort die Adresse ein und erhält dann z.B. die Adresse

    http://www.tion.de/2365

    Wenn er darauf geht wird er ohne Vorwahnung oder "sie werden weitergeleitet" einfach auf

    http://www.arcor.de/Users/Nick/home/php/webseiten/index.php

    weitergeleitet.

    [alles nur beispielangaben]



    Wichtig ist mir auch, dass rechts nicht angezeigt wird


    Am meisten benutzte Links:

    http://www.tion.de/2365
    http://www.tion.de/2364
    http://www.tion.de/2363


    , sondern alles "geheimgehalten" wird.

    Die Adressen oben sind nicht gültig, obwohl ich mir warscheinlich noch eine .de.vu holen werde.

    MySql besitze ich auch, nur halt das script nicht ,...


    Bittend um Hilfe,
    Tion

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Stichwort: mod_rewrite.
    Wobei du das bei "Freeware-Webspaces" sicher nicht bekommst.
    Einfacher wäre es für dich, eine ID oder ein Hash zu nutzen und diesen ganz simpel auszulesen.
    Beispiel:
    http://www.weiterleiten.de/?h=swuE8qWQX
    Ich denke das Datenbank-Skript dazu bekommst du alleine hin, oder?

    Edit: Ups, der vorherige Link war ein bisschen .... *hust*

    Beitrag zuletzt geändert: 6.5.2010 12:32:42 von qap2
  4. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    Danke für den Beitrag, habe gegoogelt,...
    so wie ich das verstanden habe wird dann auch nach der weiterleitung
    http://www.tion.de/2365
    als URL angegeben.
    Ich möchte aber, dass dann im Browser die Standarturl also
    http://www.arcor.de/Users/Nick/home/php/webseiten/index.php
    angegeben wird.

    Aber das mit dem mod_rewrite guck ich mir mal genauer an ,...
  5. Um überhaupt die Form der URL in deine Angegebene zu verwandeln (http://www.tion.de/2365) brauchst du mod_rewrite.
    Anders kommst du gar nicht an die Parameter (2365) um entsprechend weiterleiten zu können.
    Angenommen du hast mehrere Datensätze in deine Datenbank:
    id | hash | url
    1    hUs9   http://www.seite1.de/index.php
    2    9Ys2   http://www.seite2.de/index.php

    Über die URL http://www.tion.de/?h=hUs9 kannst du dann deine Datenbank entsprechend auslesen und per header("Location: url"); den Benutzer auf die Seite schicken.
    Ich frage mich aber, warum du das brauchst. Heut zu Tage wird beim Versenden von URL's sowieso ein anklickbarer Link gemacht.
  6. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    Hab mir jetzt mal ein paar seiten angekuckt *kopfrauch* und muss ich den Quelltext

    RewriteEngine On
    Options +FollowSymlinks
    RewriteBase /

    RewriteRule ^kurzerdateiname,(.*),(.*),(.*)(\.html?)$ umstaendlicher_datei_name_und_lang\.php?ka_id=$1&mail=$2&top=$3 [L]


    RewriteRule ^(.*)(\.html?)$ modules.php?name=$1


    in eine .htaccess datei packen;

    htaccess ist doch passwortschutz, oder???

    Edit: mit htpasswd

    Beitrag zuletzt geändert: 6.5.2010 13:53:19 von tion
  7. Nein, htaccess bietet viele verschiedene Optionen. Passwortschutz ist eine davon.
    Du müsstest eine htaccess mit ungefähr folgendem Inhalt anlegen:
    RewriteEngine On
    Options +FollowSymlinks
    RewriteBase /
    
    RewriteRule ^(.*)$ redirect\.php?h=$1 [L]

    Nun legst du die Datei "redirect.php" an, und fragst in dieser folgendes ab:
    if (isset($_GET["h"])) {
        $hash = $_GET["h"];
        // Hash kann zur Weiterverarbeitung mit der Datenbank genutzt werden
    } else {
        // Fehler, kein Hash-Code gesendet
    }

    Ich bezweifle das die RewriteEngine angeschaltet werden kann.
  8. Lima bietet mod_rewrite.
  9. Warum so kompliziert mit Mod-Rewrite?

    Wenn Du eine anonyme Linkweiterleitung selber gestalten willst, dann lege eine MySQL Tabelle an mit den Spalten ID, (evtl.) hash und lange_URL. Dann kannst Du über ein Formular dort die langen Adressen eintragen lassen. Als Aufruf verwendest Du die ID (oder legst Dir einen Hash-Wert an, dazu gibt es ein paar Anleitungen für PHP).

    Wird dann die kurze URL z.b. http://www.tion.de/redirect.php?id=122345 aufgerufen erfolgt folgende Abfrage und Umleitung:

    $query = mysql_query("SELECT lange_url FROM redirect_table WHERE id = '".mysql_real_escape_string($_GET['id'])."');
    header("Location: ".mysql_result($query,0,0)");


    edit: achso, natürlich muss man - wie qap2 schon geschrieben hat - mit Mod-Rewrite die kurze URL noch umschreiben, sofern man die kurze URL http://www.tion.de/12345 verwenden möchte. Aber den redirect kann man ganz easy über die Datenbank realisieren.

    Beitrag zuletzt geändert: 6.5.2010 15:23:18 von rnitsche
  10. a******e

    So geth es auch, einfach diesen Code in die HTML einfügen. Mit content gibst du die Verweidauer bis zur Weiterleitung an.

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <META http-equiv=refresh content="9; URL=http://seitenname.de/unterseite.html">
    </head>
    <body bgcolor="#000000">
    :
    :
  11. afuseite schrieb:
    So geth es auch, einfach diesen Code in die HTML einfügen. Mit content gibst du die Verweidauer bis zur Weiterleitung an.

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <META http-equiv=refresh content="9; URL=http://seitenname.de/unterseite.html">
    </head>
    <body bgcolor="#000000">
    :
    :


    Warum umständlich über meta's?
    Über eine header-Angabe die "Location" zu wechseln ist deutlich besser :-)
    Wie rnitsche schrieb kannst du die MySQL Abfrage sehr einfach gestalten.
    Dank nikic's Kommentar
    nikic schrieb: Lima bietet mod_rewrite.

    kannst du also die Engine anschmeisen.
    Jetzt bist du gefragt.
  12. Eigentlich ist dass eine leichte aufgabe, du brauchst dazu nur eine mysql-tabelle, eine htaccess und ein kleines php-script, ich hab da mal kurz was geschrieben, zuerst die htaccess:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteCond %{REQUEST_FILENAME} !.*\.(css|js|txt|png|gif|jpg|jpe|jpeg)$
    RewriteRule . /index.php [L]
    </IfModule>

    Dann brauchst du eine mysql-tabelle, ich hab hier mal ein sql-file erstellt, dass man so einfach z.B. mit phpmyadmin hochladen kann:
    CREATE TABLE `shorturltable` (
    `id` INT NOT NULL ,
    `shorturl` VARCHAR( 5 ) NOT NULL ,
    `longurl` VARCHAR( 255 ) NOT NULL ,
    PRIMARY KEY ( `id` )
    ) ENGINE = InnoDB

    zuletzt brauchst du noch ein kleines php-script, hier musst du im Kopf noch die Datenbankdaten zuende anpassen!
    <?php
    
    // ganz als erstes braucht das script ein paar parameter für das sql (musst du anpassen!)
    define('DATABASE_HOST','localhost'); # Der Datenbankhost
    define('DATABASE_USER',''); # Der Datenbakusername
    define('DATABASE_PASS',''); # Das Datenbakuserpasswort
    define('DATABASE_NAME',''); # Der Datenbankname
    
    define('DATATBASE_TABLE','shorturltable'); # Der Tabellenname
    define('DATATBASE_LONG_ADRESS','longurl'); # Der Spaltenname für die Originaladresse
    define('DATATBASE_SHORT_ADRESS','shorturl'); # Der Spaltenname für die shorturl
    
    // In diesem array werden alle möglichen requests gespeichert, die nicht als short-url dienen können!
    // immer dann wenn ein solcher request aufgerufen wird, wird das entsprechende HTML geladen!
    $seiten = array(
    //	die request-uri => die echte adresse auf dem server!
    // das siehst du auch ganz unten beim HTML link zum impressum!
    	'impressum' => 'impressum.php'
    );
    $seitenPattern = implode('|',array_flip($seiten));
    
    // Diese zeichen dürfen in der shorturl vorkommen, möglichst nicht verändern!!
    // mit diesem Zeichenvorrat können schon bei 6-7 Zeichen mehr adressen vergeben werden,
    // als google im Index hat, (darum ist das von mir auch auf 5 zeichen beschränkt worden)
    // aber das wird dein Server dann nicht schaffen, weil du dann schon etwa 1-10 (je nach
    // länge der Adressen) terrabyte Speicher brauchst^^
    $zeichenvorrat = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    
    // hier beginnt die Filterung, damit dass der request in eine variable übergeben wird!
    $request = $_SERVER['REQUEST_URI'];
    
    // danach wird ermittelt, ob er auf eine lokale Adresse zeigt, z.B. das Impressum!
    $lokal = preg_match("/\/(?:(?:$seitenPattern)$|$)/", $request, $matches);
    
    
    // wenn es nicht auf eine lokale resource zeigt, dann wird versucht die adresse zuzuordnen
    // und dann dahin weiterzuleiten
    if(!$lokal && false){
    	$mysql = mysql_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASS) or die('Could not connect to database');
    	if(!mysql_select_db(DATABASE_NAME))die('Unable to select the database');
    	$sql = sprintf(
    		"SELECT `%s` FROM `%s` WHERE `%s` = `%s` LIMIT 1",
    		DATATBASE_LONG_ADRESS,
    		DATATBASE_TABLE,
    		DATATBASE_SHORT_ADRESS,
    		mysql_real_escape_string($request)
    	);
    	$result = mysql_query($sql);
    	if(!$result)die('Can\'t connect to requested website');
    	$row = mysql_fetch_row($result);
    	header("Location: {$row[0]}");
    	exit();
    }
    
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
    	$error = false;
    	// Weitere Protokolle müssen vielleicht noch hinzugefügt werden, aber diese reichen normalerweise
    	if(isset($_POST['adress']) && !empty($_POST['adress']) && preg_match("/^(https|http|ftps|ftp|mms):\/\//",$_POST['adress'])){
    		// eine mysql-verbindung aufbauen und ermitteln, welche die letzte vergebene Eintragnummer ist! 
    		$mysql = mysql_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASS) or die('Could not connect to database');
    		if(!mysql_select_db(DATABASE_NAME))die('Unable to select database');
    		$sql = sprintf(
    			"SELECT `id` FROM `%s` ORDER BY `id` DESC LIMIT 1",
    			DATATBASE_TABLE
    		);
    		$result = mysql_query($sql);
    		if(!$result)die('Can\'t connect to database table');
    		if(mysql_num_rows($result) == 0)
    			$row = mysql_fetch_row($result);
    		else
    			$row = array(1);
    		// hier wird die letzte vergebene nummer in eine komische zecihenkette verwandelt
    		$wert = $row[0];
    		$ausgabe = generate_shortstring($wert);
    		if($seiten[$ausgabe])
    			$ausgabe = generate_shortstring(++$wert);
    		// diese neue zeichenkette wird in die Datenbank eingetragen und steht nun als link zur verfügung
    		$sql = sprintf(
    			"INSERT INTO `%s`(`id`,`%s`,`%s`)VALUES(%d,'%s','%s')",
    			DATATBASE_TABLE,
    			DATATBASE_SHORT_ADRESS,
    			DATATBASE_LONG_ADRESS,
    			mysql_real_escape_string(++$wert),
    			mysql_real_escape_string($ausgabe),
    			mysql_real_escape_string($_POST['adress'])
    		);
    		$result = mysql_query($sql);
    		if(!$result)die('Can\'t write into database');
    		// die neue Adresse wird hier für die ausgabe gespeichert
    		$neue_adresse = 'http://'.$_SERVER['SERVER_NAME'].'/'.$ausgabe;
    	}else{
    		$error = true;
    	}
    }elseif(count($matches)>0){
    	require_once('./'.$seiten[$matches[0]]);
    }
    // die funktion erstellt einen string aus der übergebenen nummer
    function generate_shortstring($number){
    	global $zeichenvorrat;
    	$ausgabe = '';
    	$notready = true;
    	while($notready){
    		$ausgabe = $zeichenvorrat{$number % 62} . $ausgabe;
    		if(($number = floor($number / 62)) == 0)
    			$notready = false;
    	}
    	return $ausgabe;
    }
    // hier nun die ausgabe, super einfach gehalten!
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de-DE" lang="de-DE">
    <head>
    	<meta http-equiv="Content-Type"        content="text/html; charset=utf-8" />
    	<meta http-equiv="Content-Language"    content="de-DE" />
    	<meta http-equiv="Content-Script-Type" content="text/javascript" />
    	<meta http-equiv="Content-Style-Type"  content="text/css" />
    	<title>Webadressen verkürzen</title>
    <!--	<style type="text/css">@import url('./layout.css');</style>-->
    </head>
    <body>
    <?php if($_SERVER['REQUEST_METHOD'] == 'POST'){
    	if($error){?>
    <p>Es trat anscheinend ein Fehler in Ihrer Webadresse auf, dies kann folgende Gründe haben:</p>
    <ul>
    <li>Sie haben das Feld für die Adresse leer gelassen;</li>
    <li>Die Adresse verwendet keines dieser Internetprotokolle:<ul>
    <li>https://</li>
    <li>http://</li>
    <li>ftps://</li>
    <li>ftp://</li>
    <li>mms://</li>
    </ul></li>
    </ul>		
    <?php }else{
    	echo "<p>Ihre URL wurde zu dieser verkürzt: $neue_adresse</p>";	
    	}
    }?>
    <form action="./" method="post">
    <p><label for="adress">Geben Sie hier die lange Adresse ein: </label><input type="text" name="adress" id="adress" value="" /></p>
    <p><input type="submit" id="senden-button" value="URL verkürzen" /></p>
    </from>
    <adress><a href="impressum">Impressum</a></adress>
    </body>
    </html>

    So das ganze ist jetzt ziemlich umfangreich und ich hab es selbst noch nicht getestet, aber es sollte funktionieren.

    Beitrag zuletzt geändert: 7.5.2010 15:37:35 von nemoinho
  13. bicyclegaming

    Kostenloser Webspace von bicyclegaming

    bicyclegaming hat kostenlosen Webspace.

    Aber so ein service gibs doch schon. nennt sich glaube ich url verkleiner.
  14. Autor dieses Themas

    tion

    Kostenloser Webspace von tion

    tion hat kostenlosen Webspace.

    Danke erstmal für die ganzen Antworten;
    Habe von diesem 'Service' in i.einer Zeitschrift was gelesen, glaube ComputerBild ,...
    Mich interessierte nur, wie ich als "normaler" Mensch so etwas schreiben kann, erlich gesagt ist mir PHP immer noch unheimlich,...
    so viele Zahlen, Ziffern, Sonderzeichen.
    Ich werde mich mal mit dem PHP-Text von nemoinho auseinandersetzen, aber auch mit dem von afuseite und rnitsche, quap2 und allen anderen umsetzen, reiche den Link dann mal ein wenn es was geworden ist,...
    Danke an die Vielen antworten,... tion

    __________________________:stupid: tion mal nicht in eine eigene Zeile gesetzt
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!