if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Warum funktioniert das nicht? Ich bekomme eine leere Seite.
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
}
Warum funktioniert das nicht? Ich bekomme eine leere Seite.
Antworten:
Ihr Code ist technisch korrekt. Wenn Sie sich die Kopfzeilen dieser leeren Seite ansehen, sehen Sie eine 404-Kopfzeile, und andere Computer / Programme können die Antwort korrekt als nicht gefundene Datei identifizieren.
Natürlich sind Ihre Benutzer immer noch SOL. Normalerweise werden 404s vom Webserver verarbeitet.
Das Problem ist, dass der Webserver, sobald er mit der Verarbeitung der PHP-Seite beginnt, bereits den Punkt überschritten hat, an dem er einen 404 verarbeiten würde
Zusätzlich zur Bereitstellung eines 404-Headers ist PHP jetzt für die Ausgabe der eigentlichen 404-Seite verantwortlich.
if (strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
echo "<h1>404 Not Found</h1>";
echo "The page that you have requested could not be found.";
exit();
}
Wenn Sie sich die letzten beiden Echozeilen ansehen, sehen Sie dort den Inhalt. Sie können es anpassen, wie Sie möchten.
Das ist korrektes Verhalten . Es liegt an Ihnen, den Inhalt für die 404-Seite zu erstellen.
Der 404-Header wird von Spider und Download-Managern verwendet, um festzustellen, ob die Datei vorhanden ist.
(Eine Seite mit einem 404-Header wird von Google oder anderen Suchmaschinen nicht indiziert.)
Normale Benutzer sehen sich jedoch keine http-Header an und verwenden die Seite als normale Seite.
Für die Aufzeichnung ist dies der All-Case-Handler:
<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
?> <!-- 404 contents below this line -->
die()
erforderlich?
Laden Sie die Standard-Server-404-Seite, falls Sie eine haben, z. B. für Apache definiert:
if(strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
readfile('404missing.html');
exit();
}
Seit PHP 5.4 können Sie jetzt tun http_response_code(404);
Eine andere Lösung, basierend auf @ Kitet's.
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
header("Status: 404 Not Found");
$_SERVER['REDIRECT_STATUS'] = 404;
//If you don't know which web page is in use, use any page that doesn't exists
$handle = curl_init('http://'. $_SERVER["HTTP_HOST"] .'/404missing.html');
curl_exec($handle);
Wenn Sie eine Website programmieren, die auf einem Server gehostet wird, über den Sie keine Kontrolle haben, wissen Sie nicht, welche Datei "404missing.html" ist. Sie können dies jedoch trotzdem tun.
Auf diese Weise haben Sie genau das gleiche Ergebnis einer normalen 404-Seite auf demselben Server bereitgestellt. Ein Beobachter kann nicht zwischen einer vorhandenen PHP-Seitenrückgabe 404 und einer nicht vorhandenen Seite unterscheiden.
Eine etwas kürzere Version. Unterdrücke ungerades Echo.
if (strstr($_SERVER['REQUEST_URI'],'index.php')){
header('HTTP/1.0 404 Not Found');
exit("<h1>404 Not Found</h1>\nThe page that you have requested could not be found.");
}
if($_SERVER['PHP_SELF'] == '/index.php'){
header('HTTP/1.0 404 Not Found');
echo "<h1>404 Not Found</h1>";
echo "The page that you have requested could not be found.";
die;
}
Vereinfachen Sie niemals die Echo-Anweisungen und vergessen Sie niemals das Semikolon wie oben. Warum auch ein Substr auf der Seite ausführen? Wir können einfach nur php_self ausführen
Du machst es richtig, obwohl es etwas verfeinert werden könnte. Sieht so aus, als wäre das behoben worden. Sprechen wir also über die praktischen Anwendungsvorteile:
Eine alte Website von uns, die eine große Sammlung mehrsprachiger technischer Dokumente enthält, führte dies in einer wenn sonst bedingten Bedingung aus:
if (<no file found>){
die("NO FILE HERE");
}
Das Problem (neben der nicht hilfreichen Nachricht und der schlechten Benutzererfahrung) besteht darin, dass wir im Allgemeinen einen Linkcrawler (in unserem Fall Integrität) verwenden, um fehlerhafte Links und fehlende Dokumente zu überprüfen. Dies bedeutet, dass wir eine vollkommen korrekte 200-Fehler-Antwort erhalten haben, die uns mitteilt, dass dort eine Datei vorhanden ist. Integrity wusste nicht, dass wir ein PDF erwarten, also mussten wir manuell einen 404-Header mit PHP hinzufügen. Wenn Sie Ihren Code über dem Würfel hinzufügen (da danach nichts mehr ausgeführt werden würde und der Header ohnehin immer vor einem gerenderten HTML-Code stehen sollte), würde die Integrität (die sich mehr oder weniger wie ein Browser verhält) einen 404 zurückgeben und wir würden genau wissen, wo wir nach fehlenden suchen müssen Dateien. Es gibt elegantere Möglichkeiten, dem Benutzer mitzuteilen, dass ein Fehler vorliegt.
header('HTTP/1.0 404 Not Found');
die("NO FILE HERE");
Versuche dies:
if (strstr($_SERVER['REQUEST_URI'],'index.php')) {
header('HTTP/1.0 404 Not Found');
echo "<head><title>404 Not Found</title></head>";
echo "<h1>Not Found</h1>";
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
echo "<p>The requested URL ".$uri." was not found on this server.</p>";
exit();
}
Weißt du, auf meiner Website habe ich so etwas erstellt:
$uri=$_SERVER['REQUEST_URI'];
$strpos=strpos($uri, '.php');
if ($strpos!==false){
$e404="The page requested by you: "".$_SERVER['REQUEST_URI']."", doesn't exists on this server.";
$maybe=str_replace('.php','',$uri);
$maybe=str_replace('/','',$maybe);
die("<center><h1>404</h1><hr><h3>$e404</h3><h3>Maybe try <a href=$maybe>www.leaveyortexthere.p.ht/$maybe</a>?</center>");
}
Ich hoffe es hilft dir.
Ich bin auf dieses Problem gestoßen. Ich denke, dass das Umleiten zu einem nicht vorhandenen Link auf Ihrem Server den Trick tun könnte! Weil der Server seine 404 zurückgeben würde:
header('Redirect abbb.404.nonexist');
<das existiert nicht sicher
Wenn Sie die 404-Standardseite des Servers anzeigen möchten, können Sie sie in einen Frame wie den folgenden laden:
echo '<iframe src="/something-bogus" width="100%" height="100%" frameBorder="0" border="0" scrolling="no"></iframe>';