Hallo, alle zusammen!
Ich hab da ein recht seltsames Verhalten meines lokalen Webservers und/oder meiner Skripte. Es gibt einen praktikablen Workaround, das ist nicht das Thema. Aber anscheinden habe ich irgendeine grundlegende Funktionalität von PHP Sessions oder des .htaccess - Files nicht richtig verstanden und möchte diese Bildungslücke gerne schließen ...
Zunächst eine kurze Beschreibung zum dynamischen Aufbau meines Webauftrittes:
Der Auftritt läuft komplett über die index.php. Bei Anklicken eines Menüpunktes wird Variable $cont, die festlegt, welcher Content eingebunden wird, per GET weitergegeben. Diese Variable dann in einer Session abgespeichert, damit man sich innerhalb eines Menüpunktes bewegen kann. Der Auftritt liegt nicht in der Document-Root sondern in /unterverzeichnis.
Meine .htaccess in der Document-Root ruft bei Fehler 404 nun die Datei fehler.php (ebenfalls in der Document-Root) auf, und Diese enthält folgende Zeile:
header("Location: unterverzeichnis/index.php?cont=fehler");
So, das Problem: wenn ich nun http://localhost/unterverzeichnis/index.php ohne Parameter aufrufe, zeigt sich die Fehlerseite und das liegt daran, daß in der Session die Variable cont=fehler gesetzt ist.
Ich habe ein wenig mit der fehler.php rumgespielt und folgende Ergebnisse erhalten:
header("Location: unterverzeichnis/test.php?cont=fehler");
Die Seite index.php wird gelaten, $_SESSION['cont']='fehler', $_GET['cont']=NULL,
header("Location: unterverzeichnis/index.php?cont=hund");
Die Seite index.php wird gelaten, $_SESSION['cont']='hund', $_GET['cont']=NULL,
(und ich bin mir sehr sicher, daß ich die Variable $hund nirgends sonst verwendet habe ...)
header("Location: unterverzeichnis/index.php");
Die Seite index.php wird gelaten, $_SESSION['cont']=NULL, $_GET['cont']=NULL,
statt header() eine Textausgabe:
Die Seite index.php wird gelaten, $_SESSION['cont']=NULL, $_GET['cont']=NULL, keine Textausgabe
Ergebnis: die Weiterleitung wird nicht ausgeführt (es wird immer die index.php geladen), aber die Variable cont wird ausgelesen, und zwar wird sie nicht per $GET übertragen sondern direkt in die SESSION, die zu diesem Zeitpunkt zwar vom vorherigen Aufruf noch besteht, aber noch nicht einmal gestartet ist, eingelesen.
Wenn ich statt der header()-Weiterleitung eine HTML-Weiterleitung (per <meta refresh>) verwende, funktioniert alles, wie es soll (das ist auch die Lösung, die ich nun verwende).
Ich verstehe es nicht, hat jemand von Euch eine Erklärung?
Hoffnungsvoll, Caro