4 Stimmen

PHP Redirect Headers Beste Praktiken

Ich erstelle ein PHP-CMS und habe einige Systemseiten wie eine 404-Seite, eine Wartungsseite und eine Seite für nicht autorisierten Zugriff. Wenn Seite A nicht gefunden wird, leitet das CMS auf die 404-Seite um; wenn der Benutzer keinen Zugriff auf Seite B hat, leitet es auf die Seite für nicht autorisierten Zugriff um usw.

Ich möchte den richtigen Statuscode in der Kopfzeile jeder Seite verwenden, aber ich brauche Klarheit darüber, wie ich die Kopfzeile/Weiterleitung behandeln soll. Setze ich den 404-Header auf Seite A und leite dann auf die 404-Seite um oder setze ich den 404-Status auf die 404-Seite selbst? Und wenn Letzteres die richtige Antwort ist, welche Art von Weiterleitung sollte ich dann verwenden, eine 301 oder eine 302?

6voto

Pascal MARTIN Punkte 384469

Wenn ein Benutzer auf Seite A ankommt und diese Seite nicht existiert, dann leiten Sie nicht um: Senden Sie einfach einen 404-Fehlercode von Seite A - und, um nett zu sein für Ihren Benutzer, einen HTML-Inhalt, der anzeigt, dass die Seite nicht existiert.

Auf diese Weise kann der Browser (und das gilt erst recht für Crawler!) weiß, dass es sich bei der nicht gefundenen Seite um Seite A handelt und nicht um eine andere Seite, auf die Sie umgeleitet hätten.

Dasselbe gilt übrigens auch für andere Arten von Fehlern: Wenn eine bestimmte URL einem Fehler entspricht, dann sollte der Fehlercode von dieser URL aus gesendet werden.

Im Grunde genommen sollte etwas so Einfaches wie dies ausreichen:

if (page not found) {
    header("404 Not Found");
    echo "some nice message that says the page doesn't exist";
    die;
}

(Sie könnten natürlich etwas Schöneres ausgeben, aber Sie verstehen schon ;-) )

1voto

therufa Punkte 2031

Ich bin mir nicht sicher, ob die Weiterleitung der beste Weg ist, dies zu tun. Id lieber verwenden einige integrierte Funktionalität, die in das Projekt enthalten ist.

Wenn die Daten nicht gefunden werden, leiten Sie den Benutzer nicht auf eine andere Seite um, sondern senden Sie ihm lediglich eine Fehlermeldung, wie Hey, this site does not exists! Try an other one und so. Und nicht am Ende, man sollte den Code einbauen, den Code-Teil aus der Antwort von Pascal Martin.

Ich würde dies in eine Funktion zu tun, und rufen Sie es von einem Bootstrap oder etwas mit einem ähnlichen Verhalten.

function show_error($type="404", $header = true, $die = false)
{
    if($header)
        header("404 Not Found");

    echo file_get_contents($type.'.php');

    if($die) die; //
    // and so on...
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X