dedlfix: php header:location

Beitrag lesen

Tach!

der Redirect wird nicht vom Server ausgeführt, sondern der Browser reagiert auf den Response-Header. Und er ruft, bei einer relativen URL, die neue Adresse relativ zu der Adresse aus dem Request ab.

Wenn also foo.php und bar.php im gleichen Ordner stehen, sollte eine Response aus foo.php mit Header Location: bar.php die gewünschte Umleitung erzielen (Location, nicht location, das hatte ich oben falsch geschrieben, sorry).

Jein, wie du auch sagst, ist das kein Thema für den Server, also sind dessen Gegebenheiten im Dateisystem nicht direkt maßgebend. Wenn foo.php und bar.php im selben Ordner stehen, führt das nur dann zum selben Ergebnis, wenn dazu als Bedingung erfüllt ist, dass die sie über URLs auf derselben Ebene aufgerufen werden. Mit selber Ebene meine ich, dass der Path-Anteil zwischen Hostnamen und dem am weitesten rechts stehenden '/' derselbe ist.

http://example.com/x/y/foo/parametername/value
http://example.com/x/y/bar

Beide URLs könnten zwar per Rewrite-Mechanismus auf foo.php und bar.php im selben Verzeichnis umgeschrieben werden, sie sind aber aus Client-Sicht auf unterschiedlichen Ebenen. Ein relatives Location auf index php führt zu

http://example.com/x/y/foo/parametername/index.php
http://example.com/x/y/index.php

Solch ein Rewriting wäre neben dem von mir bereits erwähnten include/require von Dateien eine zweite Möglichkeit, dass URLs nicht mit Dateinamen gleichgesetzt werden können.

Um das zu debuggen, würde ich im Netzwerk-Tab des Browsers beginnen. Welche Requeste führt der Browser durch, welche Header sind in der Response des ersten Requests?

Im Prinzip ja, dazu muss man sie aber auch aus den Fehlermeldungen im Logfile nachvollziehen können.

Übrigens, Pit, wenn Du schon die URL verabsolutieren willst, dann ist $_SERVER['SERVER_NAME'] das falsche Präfix. Richtig ist ... [Protokoll + $_SERVER['HTTP_HOST']]

Ja, Begründung ist, dass der SERVER_NAME der Name des VHost ist, der HTTP_HOST hingegen der Hostname, den der Client anfordert. Das kann durchaus auch ein Alias zum Servernamen sein, und dann hat man eine Umleitung zu einem anderen Domainnamen als Ergebnis. Soweit die Theorie. In der Praxis ist es wohl so, dass im Zusammenspiel zwischen Apache und PHP der SERVER_NAME ebenfalls auf den Wert Hostname gesetzt und damit beides gleich ist. Das kann aber anderenorts anders sein, weshalb man der Ordnung halber doch lieber HTTP_HOST nimmt.

dedlfix.