Jörg Kruse Webprogrammierung
und SEO seit 2005
Menü

Passende HTTP-Status-Codes setzen

aktualisiert:
Verschiedene HTTP-Status-Codes lassen sich in der .htaccess Datei mit Status-Argumenten in einer Redirect-Direktive oder mit mod_rewrite Flags einstellen, sowie in PHP-Scripten mit der Funktion header(). Auf dieser Seite werden die geläufigsten Status-Codes anhand von Beispielen kurz erklärt.

301 – Moved permanently

Der Status Code 301 besagt, dass der Inhalt der Seite dauerhaft umgezogen wurde zu der URL, die mit dem HTTP-Header Location angegeben wird. In PHP kann eine Seite beispielsweise mit folgendem Code permanent zur URL https://example.com/ umgezogen werden:


<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://example.com/');
header('Connection: close');

Mit einer Redirect-Direktive kann eine komplette Website unter Beibehaltung der Pfade weitergeleitet werden, wobei ein Argument 301 oder permanent anzeigt, dass die Weiterleitung dauerhaft ist:


Redirect 301 / https://example.com/

In mod_rewrite wird hierzu das Flag R=301 gesetzt:


RewriteEngine on
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

302 – Found

Wird ein Inhalt nur temporär zu einer Ziel-URL weitergeleitet, so wird dies mit dem Status-Code 302 angezeigt. In PHP ist dieser Standard bei einem Redirect, so dass der Status nicht mit header() gesetzt werden muss:


<?php
header('Location: https://example.com/');
header('Connection: close');

Auch in der .htaccess Datei kann mit Status Code 302 weitergeleitet werden:


Redirect 302 / https://example.com/

RewriteEngine on
RewriteRule ^(.*)$ https://example.com/$1 [R=302,L]

Zur Unterscheidung von 301 und 302 siehe auch diesen Blogartikel

403 – Forbidden

Mit einem Status Code 403 verweigert ein Webserver den Zugang zu der angefragten Webseite.:


<?php
header('HTTP/1.0 403 Forbidden');

In mod_rewrite bewirkt das Flag „F“ eine Zugriffsverweigerung, z.B. gegenüber einem Bot mit einem bestimmten User-Agent-String:


RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} "Bad Bot"
RewriteRule .* - [F]

404 – Not Found

Der Status Code 404 zeigt an, dass der angeforderte Inhalt nicht gefunden wurde. Möglicherweise handelt es sich hierbei um ein temporäres Problem. In PHP lässt sich der Status 404 folgendermaßen setzen:


<?php
header('HTTP/1.0 404 Not Found');

410 – Gone

Im Gegensatz zu einem Status 404 bedeutet der Code 410, dass der Inhalt unter der betreffenden URL entfernt wurde. In mod_rewrite zeigt das Flag „G“ einen Status 410 „Gone“ an:


RewriteEngine on
RewriteRule ^gibt-es-nicht-mehr\.html$ - [G,L]

503 – Service Unavailable

Kann der Inhalt einer Seite aus technischen Gründen nicht ausgeliefert werden, weil z.B. eine Datenbankverbindung nicht zustandekommt, so empfiehlt es sich, einen Status 503 zu setzen. Mit dem HTTP-Header Retry-after kann angegeben werden, in wievielen Sekunden der Browser / Bot die Seite wieder aufrufen sollte.


<?php
header('HTTP/1.0 503 Service unavailable');
header('Retry-after: 3600');