Eintrag-Details: Seiten Umleiten mit PHP

27.01.2006

Seiten Umleiten mit PHP

Wollen Sie Besucher beim Aufruf einer Seite auf eine ganz andere Seite umleiten? Mit PHP geht so etwas ganz einfach.

[Mehr:]

Beispiel: Sie möchten, dass beim Laden der Seite "seite1.php" der Besucher auf die Seite "seite2.php" umgeleitet wird. Dazu können Sie die PHP-Funktion header() verwenden. Schreiben Sie ein PHP-Skript, das Sie dann unter dem Namen "seite1.php" abspeichern. Das Skript sollte folgende Zeilen enthalten:

<?php
// einfache umleitung
header("Location:seite2.php");
?>

Code herunterladen

Wichtig bei der Verwendung von header(): Es sollten keine Textausgaben auf der Seite ausgegeben werden. Der Aufruf von header() sollte also möglichst am Anfang des Skripts erfolgen oder im Skript sollte überhaupt kein weiterer Text angezeigt werden.

Advertisement/Werbung
Genau genommen müssten eigentlich auch das Protokoll und die Domain nach "Location:" erscheinen, also:

http://meinedomain.de/seite2.php

Code herunterladen

in der Praxis hat sich gezeigt, das die Umleitung auch in der hier beschriebenen Kurzform funktioniert, wenn sich die Seite auf der gleichen Domain befindet.

Trotzdem sollte, wenn möglich, die vollständige URL zur Umleitung angegeben werden

Anmerkung: Die hier vorgestellten Beispiele sollen lediglich das Prinzip verdeutlichen. Bei einigen Einzelheiten würde man in einer endgültigen Anwendung möglicherweise anders vorgehen. Sie dienen hier lediglich als Beispiele, damit das Verfahren anschaulich erläutert werden kann. In meinen Online-Kursen wird selbstverständlich genauer auf Einzelheiten eingegangen.

Advertisement/Werbung
Eine Alternative ist die Umleitung über den HTML-Redirect:

<head>
<meta http-equiv="refresh" content="1; seite2.php">
  <!-- ... andere Angaben im Dateikopf ... -->
</head>
<body>
Sie werden in einer Sekunde weitergeleitet
</body>

Code herunterladen

Der Vorteil hier: Man kann dem Besucher noch mitteilen, dass er umgeleitet wird. Die Zeit bis zur Umleitung kann auch auf Null gesetzt werden, so dass die Weiterleitung ohne Verzögerung erfolgt.

Wozu wird eine Umleitung überhaupt benötigt? Stellen Sie sich vor, Sie möchten Ihren Besuchern andere Seiten empfehlen. Dabei möchten Sie jedoch feststellen können, welche Seiten der Besucher über Ihre Seiten angeklickt hat. So können Sie später auswerten, welche Ihrer Empfehlungs-Links häufiger angeklickt wurde.

Das folgende Skript leitet den Besucher je nach Auswahl zu der entsprechenden Seite um. Vorher wird der Klick jedoch mit Datum und Uhrzeit in einer Logdatei festgehalten:

<?php

if (isset($_GET['id']))
{
    switch($_GET['id'])
    {
        case 2:
            $url = "seite2.php";
            write_log("seite2.log");
            break;
        case 3:
            $url = "seite3.php";
            write_log("seite3.log");
            break;
    }
    header("Location:$url");
}

?>
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
       <title>Ihre Auswahl</title>
</head>
<body>
Sie möchten <a
    href="<?php
        print($GLOBALS['PHP_SELF'].'?id=2');
    ?>">erstes Angebot</a><br>
Sie möchten <a
    href="<?php
        print($GLOBALS['PHP_SELF'].'?id=3');
    ?>">zweites Angebot</a><br>
</body>
</html>
<?php

function write_log($dateiname)
{
    echo "log to $dateiname";
    $fp = fopen($dateiname, "a");
    if (!$fp) die ('kann datei nicht öffnen');
    fputs($fp, "Seite wurde aufgerufen " .
        strftime("%d.%m.%Y %H:%M:%S") . "\r\n");
    fclose($fp);
}
?>

Code herunterladen

Das Skript zeigt zunächst zwei Links an, die wiederum die gleiche Seite über $GLOBALS['PHP_SELF'] aufrufen. Bei jedem Link wird noch ein Parameter "id" übergeben. Beim zweiten Aufruf wird dieser Parameter in der Variable $_GET['id'] erkannt. Dann verzweigt das Skript über die switch-Anweisung und legt die entsprechende URL für die Weiterleitung fest. Bevor jedoch weitergeleitet wird, sorgt ein Aufruf der selbst definierten Funktion write_log() für den Eintrag in die zuständige Logdatei.

Damit das Skript die Dateien auf dem Webserver selbst anlegen kann, müssen in dem Verzeichnis, in dem es läuft, Schreibrechte für alle freigegeben sein. Sollte das nicht möglich sein, so erzeugen Sie die Logdateien auf Ihrem lokalen Rechner (leere Dateien, mit Notepad erstellt reichen völlig) und kopieren Sie diese Dateien per FTP auf den Server. Dann müssen nur für diese Logdateien die Schreibrechte freigegeben sein.

Hinweis: Diesen Text und die enthaltenen Beispielprogramme und Skripte dürfen Sie zum Erlernen der einzelnen Techniken und auch als Grundlage für Ihre eigenen Projekte auf eigene Gefahr kostenlos nutzen.

Bitte denken Sie daran, dass alle Texte und Quellcodes trotzdem urheberrechtlich geschützt sind. Eine direkte Weitergabe ist nur nach ausdrücklicher schriftlicher Genehmigung gestattet.

Permalink 27.01.2006 11:24:49, von Marian Email , 548 Wörter, 40855 mal angeschaut   German (DE) Kategorien: PHP

Kommentare, Pingbacks:

Kommentar von: MAsterF [Besucher]
hallo
bei diese code erhalate ich folgende fehlermedung:
Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\htdocs\testfile.php:40) in
ich will anstatt auf eine locale link zu einem URL weiterleten
wo liegt der Fehler
wie kann ich das machen

Permalink 09.02.2006 @ 04:44
Kommentar von: Marian [Mitglied] · http://www.heddesheimer.de
Der Fehler besagt, dass Sie in der Datei "testfile.php" in Zeile 40 eine Ausgabe auf der Seite machen. Manchmal handelt es sich nur um eine Leerzeile, die unbeabsichtigt ausgegeben wird. Vermutlich haben Sie nach dem schließenden PHP-Tag noch eine Leerzeile im Code oder etwas ähnliches.

Achten Sie darauf, dass vor der Ausführung der header-Funktion, keine HTML-Ausgabe erfolgt, ansonsten erhalten Sie diese Fehlermeldung.

Gruß
Marian Heddesheimer
Permalink 09.02.2006 @ 07:26
Kommentar von: MAsterF [Besucher]
danke
es hat geklappt
Gruß
Permalink 13.02.2006 @ 02:44
Kommentar von: Manuel [Besucher]
So, diese

header("Location:irgendwas.php");

is ja schön ung gut, aber ich bekomme zum verrecken, die Fehlermeldung:
Warning: Cannot modify header information - headers already sent by ..... usw....

Laut Einträgen oben, handelt es sich um Leerzeichenfehler etc... Aber zum Verrecken Leute da is nix. Denke das Problem liegt daran, dass ich gezwungen bin die Datei mit joe direkt auf dem Server zu schreiben.

Gibts nicht irgendwas womit ich dat ignorieren kann? Ich bin schon soweit mit meinem Prog und scheiter an so nem Mist.
Hier mal mein vollständiges Problem;
Vielleicht gibts ja auch andere Lösungsansätze hierfür als header...

und zwar versuche ich über ein Webinterface Ciscokomponenten zu konfigurien / aus zu lesen. Klappt auch wunderbar.(Bei Intresse nachfragen)Na ja im Zuge dessen habe ich ne html seite wo ich formularfelder (Passwort und
Benutzername) habe. Anhand nem Submitbutton werden die anhand form=action
.... an ne nächste seite übertragen. (Post dann etc.. easy soweit))
Diese Seite macht jetzt damit allerhand (unteranderem telent zu nem
router, status berichte auslesen und so uninteressant soweit)
Alles was ich da zurück bekomme schneide ich mir irgendwie zurecht und speicher
das in nem Array. Das Array jetzt auf der Seite die ich
aufgerufen habe aus zu geben, wäre ja zu einfach.(Langweillig :-) )
Ich möchte das Array an eine extra Seite ausgabe.php übergeben, die sich dann um die
Ausgabe kümmert. (Weil ich hab ja noch andere Seiten die mir auch Ausgaben
berechnen und irgendwo hinschicken sollen) Aber dat alles soll ohne
irgendnen Knopf drücken zu müssen von statten gehn.
Ich dachte eigentlich und gibts doch sicher irgendwas, was ich ans Ende meines Quelltextes schreiben kann.
So nach dem Motto load ausgabe.php?ausgabearray=blub oder so...........
Permalink 27.02.2007 @ 14:15
Kommentar von: Jens [Besucher]
Hallo,

ich möchte ein Umleitung erstellen wobei der aufgerufene Link sich in einem neuen Browser öffnet. Die Ausgangsseite soll also im "Hintergrund" bestehen bleiben. Ist so etwas möglich?
Permalink 28.02.2007 @ 20:20
Kommentar von: Stefan Sohns [Besucher]
Hallo,
wollte nur schnell Danke sagen. Ist immerwieder nett wenn Leute sich die Arbeit machen und auch Anfängern mit solchen Seiten die Möglichkeit geben sich etwas in der Welt der Programmierung zurechtzufinden.

Vielen Dank für die gut beschrieben Beispiele.

Stefan Sohns
Permalink 27.05.2007 @ 19:38
Kommentar von: Oliver [Besucher]
Super Seite. weiter so!
Permalink 09.06.2008 @ 15:02
Kommentar von: der Dirk [Besucher]
Ich habe 2 Domains auf einen Webspace
Domain1 soll im Hauptverzeichnis bleiben
aber Domain2 soll in Verzeichnis AB verweisen wie kann ich das machen
htacess wird nicht akzeptiert vom Provider...
Ich hoffe das ich mich verständlich ausgedrückt habe...

Danke für die Hilfe
Permalink 22.06.2009 @ 22:13

Werbung

Online-Kurse

  • Bequem PHP lernen bei freier Zeiteinteilung von zuhause
  • Der Onlinekurs den jeder versteht
  • www.lernpilot.de/wbt/

Konnte ich helfen?

mehr Werbung