Christian Seiler: nun aber

Beitrag lesen

Hallo,

was Du brauchst, ist eine HTTP-Weiterleitung. Christopher wollte Dir genau das zeigen, jedoch sind ihm ein paar Flüchtigkeitsfehler unterlaufen.

Eine HTTP-Weiterleitung verschickst Du als Feld im HTTP-Header. Daher darf noch keine Ausgabe vom Script produziert worden sein.

Ein Location-Header wird so gesendet:

Header ("Location: " . $uri);

$uri muss laut Standard eine absolute URI sein. Einige Browser interpretieren zwar auch relative URIs, aber das ist schlichweg falsch.

Desweiteren: Auf die Seite, auf die weitergeleitet wird, wird dann per GET vom Browser zugegriffen. (also nicht POST wie es üblich ist bei Formularen)

Also:

function Leite_Weiter ($wohin_relativ) {
  $dn = dirname ($_SERVER["PHP_SELF"]);
  if (substr ($dn, -1) != "/") $dn .= "/";
  Header ("Location: http://" . $_SERVER["HTTP_HOST"] . $dn . $wohin_relativ;
  exit;
}

Diese Funktion kannst Du dann so aufrufen:

Leite_Weiter ("index.php?a=b");

Danach wird die Programmausführung beendet.

Du musst bloß sicherstellen, dass der User *nicht* direkt über die IP auf den Server zugreift. (sofern das mit virtual hosts überhaupt möglich ist) [1]

Grüße,

Christian

[1] Das Problem hatte ich schon mal, dass dann in $_SERVER["HTTP_HOST"] der Hostname und nicht die IP stand und dann hat der Session-Cookie natürlich nicht mehr gegriffen.