2009-07-31 5 views
4

Aus irgendeinem Grund verursacht ein Aufruf von header() einen internen Serverfehler für mich. Ich benutze PHP5 und benutze mod_rewrite ausgiebig in diesem Skript (wenn das hilft). Hier ist der Code (Art):PHP header() verursacht internen Serverfehler

<?php 

include 'core/initialize.php'; // Loads the core class (and session manager class) 

    if($_GET['reset'] == 'true') 
    { 
     $core->Session->Visits = 0; 
     header('Location', 'index.html'); 
     # header('X-Test', 'wtf'); // causes the error too :(
    } 
    if(isset($core->Session->Visits)) $core->Session->Vists += 1; 
    else $core->Session->Visits = 0; 
    echo "Previous Visits: {$core->Session->Visits} (<a href='index.html?reset=true'>Reset</a>)"; 
?> 

Meine .htaccess-Datei sieht wie folgt aus:

# Start up the rewrite engine 
Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^(.*)$ navigator.php?nav=$1&%{QUERY_STRING} [NC] 

Antwort

9

Sie verwenden diese:

header('Location', 'index.html'); 

Es ist nicht die Art und Weise header Muss verwendet werden: Der zweite Parameter sollte ein boolescher Wert sein.

UND der erste sollte der Header-Name + Wert sein.

Also, in Ihrem Fall, so etwas wie diese:

header('Location: index.html'); 

nur ein Parameter; und Name + ':' + Wert :-)

Es gibt ein Beispiel in der Dokumentation:

Der zweite Sonderfall ist die "Location:" Header. Es sendet nicht nur diese Kopfzeile zurück an den Browser, , sondern gibt auch einen REDIRECT (302) Statuscode an den Browser zurück, es sei denn, es wurde bereits ein 3xx Statuscode gesetzt.

<?php 
header("Location: http://www.example.com/"); /* Redirect browser */ 

/* Make sure that code below does not get executed when we redirect. */ 
exit; 
?> 


Als Nebenbei bemerkt, wenn ich mich richtig erinnere, sollten Sie eine vollständige absolute URL verwenden, wenn die Location Header verwendet wird; Ich weiß, die Verwendung relativer URL funktioniert in (fast?) Allen Browsern, aber es ist nicht gültig, wenn ich den HTTP RFC lese, wenn ich mich richtig erinnere.


Als zweite Bemerkung am Rande (ja, hat die Antwort bereits akzeptiert worden, aber vielleicht wird es nützlich sein, sowieso, für die nächste Zeit :-)): dass „Internal Server Error“ Ihre PHP hinweisen Skript ist auf einen Fehler gestoßen.

In diesem Fall sollten Sie die error_log ‚s-Datei überprüfen ...
... Oder aktivieren error_reporting und display_errors Dinge zu erleichtern - zumindest auf dem Entwicklungscomputer.

+0

Ich fühle mich jetzt ziemlich dumm. Danke –

+0

@Chris T - Mach dir keine Sorgen zu viel darüber. Früher oder später entdecken alle guten Programmierer, dass der Preis dafür, das Obskure zu sehen, manchmal das Offensichtliche ist. ;-) –

+0

@Chris: mach dir keine Sorgen darüber; Ich weiß, jemand anderen einen Blick auf unseren Code zu werfen, kann wirklich helfen, manchmal :-) (übrigens, ich habe meine Antwort bearbeitet, nachdem Sie es akzeptiert haben, um eine weitere Information über error_log zu geben) –

Verwandte Themen