PHP header Weiterleitung funktioniert auf dem 1&1 Server nicht?
Ich programmiere schon sehr lange PHP, weshalb es nicht an dem Code liegt...
Ein sehr großes Problem. Auf dem lokalen und auch auf einem Internet Server funktioniert mein Code. Als ich alles auf den 1&1 Webserver getan habe und auch die richtige PHP version eingestellt habe ( ist die EINZIGE einstellung für PHP ) funktioniert trotzdem nichts.
Ich habe eine Testdatei erstellt, für testzwecke, damit es leichter ist vielleicht Fehler zu finden. Mit dem ( header(Location: xyz); ) Funktioniert die weiterleitung nicht. Es bleibt einfach auf der gleichen Seite stehen. Ich habe auch vorher kein Echo Befehl, so dumm bin ich nicht.
Beispielsituation; Man loggt sich ein, und bei Fehler soll eine Fehlermeldung kommen, ansonsten einfach aufs Profil weiterleiten, aber NEEEIN man erhält keine Fehlermeldung, was bedeutet, dass man die Verbindung zur Datenbank hat und alles richtig ist, aber man bleibt auf der Loginseite. Dies ist auch beim Ausloggen der Fall. Man sollte zu Startseite weitergeitet werden nach dem ausloggen, aber man bleibt auf der logout seite.
Bitte hilft mir leute. Gibt es ein Fehler vielleicht in PHP 5.6 mit den Header funktionen oder was. Hier mein test code:
html
head
title Test title
/head
body
?php
header("Location: index.php");
?
/body
Und auch mit exit; Geht es nicht. Exit ist nicht notwendig "by the way" aber allgemein, es funktioniert einfach nicht.
6 Antworten
Ich programmiere schon sehr lange PHP, weshalb es nicht an dem Code liegt...Ich habe auch vorher kein Echo Befehl, so dumm bin ich nicht.
Es liegt aber am Code, und eine Ausgabe muss nicht per echo sein. Es darf überhaupt nichts davor stehen. Und natürlich muss die komplette Adresse für die Umleitung angeben werden.
Als Ergänzung zu den anderen Antworten - auch der Header selbst ist falsch, obwohl er so in den meisten Fällen dank nachgiebiger Browser funktionieren wird. "Location" verlangt jedoch schon immer eine absolute Adresse, und an solche Spezifikationen sollte man sich halten.
Ansonsten wurde der Grund für Dein Problem bereits genannt - die HTML-Ausgabe vor dem PHP-Block bewirkt bereits das Senden der normalen Response-Header, somit kommt Dein eigener Header zu spät. Daß es auf anderen Servern funktioniert, kann mit Output Buffering zusammenhängen.
Super, kannst du mir denn vielleicht schon sagen, wie ich mit PHP anders weiterleiten kann. Also welches das sicher ist.
Wäre super nett.
1und1 schreibt selbst folgendes dazu:
Damit die Weiterleitung via PHP-Script funktioniert, muss der Code-Block
am Anfang stehen, bevor der Server eventuelle HTML-Inhalte auf der
Weiterleitungsseite ausliefert.
Mache nur das rein, dann geht es:
Vor der "header" Anweisung darf keinerlei Ausgabe erfolgen, kein HTML, kein Text, keine Leerzeichen, einfach nichts. Das hat auch nichts mit dem Provider zu tun, das ist überall so.
<?php
header("Location: index.php");
?>
Ich kenne dann nur noch den normalen Link oder die meta-Anweisungen (Nur da ist es mit der Sicherheit so eine Sache).
Mehr Informationen dazu gibt es hier:
https://wiki.selfhtml.org/wiki/HTML/Kopfdaten/meta
<meta http-equiv="refresh" content="5; URL=https://wiki.selfhtml.org/">
Blöde Frage, aber kann es sein dass deine Config auf production gestellt ist und du somit keine Fehlermeldung erhältst ?
hau mal den code oben rein:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Super, kannst du mir denn vielleicht schon sagen, wie ich mit PHP anders weiterleiten kann. Also welches das sicher ist.
Wäre super nett.