header Location geht nicht unter Windows

tequito

Mitglied
Hallo,

ich habe ein komisches Problem. Mein Entwicklungssystem ist eine XAMPP Installation unter Windows.

Nun soll eine header Location Weiterleitung gemacht werden. Leider geht die mit einem absoluten Pfad auf Windows nicht.

Das erzeugt keine Weiterleitung, es passiert einfach nichts:
PHP:
header('Location: D:/XAMPP/htdocs/mysystem/main.php');

Das hier geht beides:
PHP:
header('Location: ./main.php');
PHP:
header('Location: http://www.beispiel.de');

Hat jemand dafür eine Erklärung und eine Idee für einen Bugfix?
 
Hi,

mit diesem absoluten Pfad dürfte die Weiterleitung auf dem Webserver auch unter Windows und ganz ohne Bugfix funktionieren:

PHP:
header('Location: http://localhost/mysystem/main.php');
 
Du musst auch absolute URLs angeben und nicht absolute Pfade, die nur intern im Dateisystem gültig sind. Schließlich veranlasst eine Weiterleitung, dass der Client dieser folgt und nicht der Server.
 
PHP:
header('Location: D:/XAMPP/htdocs/mysystem/main.php');

Ist kein gültiger Identifikator. Eventuell würde header('Location: file:///D:/XAMPP/htdocs/mysystem/main.php'); funktionieren, aber das ist wohl nicht das, was du möchtest.

Der HTTP-Location-Header erwartet, wie gesagt, eine gültige URL, die er auflösen kann.
PHP:
header('Location: ./main.php');
ist eigentlich auch nicht zulässig, da relativ (laut Spezifikation sollen nur absolute Location-Identifier verwendet werden), wird aber von den meisten Browsern korrekt aufgelöst.

Nun, dein Problem ist wahrscheinlich sehr schnell gelöst. Du möchtest nicht auf das lokale Filesystem sondern auf den lokalen Server verweisen. Deshalb bietet sich folgender Ansatz an:
PHP:
header('Location: http://localhost/mysystem/main.php');
// oder als absolute, zum Host relative Angabe
header('Location: /mysystem/main.php');

Siehe Abschnitt 14.30

(Anscheinend bin ich zu langsam für die Herren über mir ;) )
 
Dann stehe ich etwas auf dem Schlauch. Ich habe mir in einer Datei die immer als erstes aufgerufen wird eine Konstante erstellt, die den (vermeintlich) absoluten Pfad speichert.

PHP:
define('C_ROOT', $_SERVER['DOCUMENT_ROOT'] . '/mysystem');

und C_ROOT liefert mir das:
Code:
D:/XAMPP/htdocs

Wie bekomme ich denn korrekt den absoluten Pfad heraus?
 
PHP:
<?php

 echo "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["PHP_SELF"];

?>
Die Ausgabe beginnt dann schonmal mit "http://localhost/", und der Rest ergibt sich dann, aus welchem Verzeichnis heraus du den Code ausführst.
 
Vielleicht steht ich bei sommerlichen Temperaturen auch auf dem Schlauch.;-)

Aber "localhost" ist ja nicht der absolute Pfad und "www.url.de" wäre es auch nicht.
 
Du musst natürlich unterscheiden zwischen dem absoluten Pfad des HTTP Requests und einem absoluten Pfad im Dateisystem ;)
 
Du musst zwischen Dateisystempfade und URLs unterscheiden. Die einen werden im Server intern benötigt, die anderen um Ressourcen auf dem Server zu beschreiben. Und da der Client mit Dateisystempfaden nichts anfangen kann, da er keinen direkten Zugriff auf das Dateisystem hat, braucht er die URLs.
 
Zurück