Http-Header aus TYPO3 heraus

Schon öfters standen wir vor dem Problem, dass TYPO3 irgendwelche HTTP-Header liefert, nur nicht die, die wir erwarteten. Heute bin ich auf die Spur gestoßen: bei einem Kunden blieben gelöschte Seiten im Index der Suchengine. Ursache war, dass bei gelöschten Seiten eine Defaultseite mit aktuellem Inhalt gezeigt wurde – nur wurde dabei kein 404 odgl. gesendet, sondern ein „302 Found“, wodurch die veraltete URL dem indexer als in Ordnung suggeriert wurde. Das brachte aber die indizierten Inhalte durcheinandern.

In TYPO3 geguckt

Header werden elegant via API gesetzt mittels der Klasse t3lib_utility_Http (bzw. genamespacte Variante). Dort sind die Status auch als Konstanten deklariert wie zB. „const HTTP_STATUS_404 = ‚HTTP/1.1 404 Not Found‘;“. Dennoch bekommt man nach einem setResponseCode() keinen 404 raus… Auf der Suche nach einem händischen Weg an der API vorbei (Ja, auch ich tu sowas, wenn es dem Kunden nützt) stieß ich auf die Begründung:

Wenn FastCGI verwendet wird, muss folgendes benutzt werden um einen 404 Response Header zu senden:
 <?php
 header("Status: 404 Not Found");
 ?>

(http://php.net/manual/de/function.header.php)

Und siehe da, wenn man ohne die Konstante arbeitet, dann klappt’s auch mit der API:

t3lib_utility_Http::setResponseCode('Status: 404 Not Found');

Weitere Tests

Schon genug gesehen? Nein. Betrachten wir das Ganze nochmal genauer mit vier Testdateien und schauen mit Live HTTP headers die Antworten an:

test_1.php

<?php
header("HTTP/1.1 404 Not Found");
echo 'Sending "HTTP/1.1 404 Not Found"';
?>

Ergebnis:

test_1

Antwort: HTTP/1.1 200 OK

test_2.php

<?php
header("HTTP/1.0 404 Not Found");
echo 'Sending "HTTP/1.0 404 Not Found"';
?>

Ergebnis:

test_2

Antwort: HTTP/1.1 200 OK

test_3.php

<?php
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
echo 'Sending "' . $_SERVER["SERVER_PROTOCOL"]. ' 404 Not Found"';
?>

Ergebnis:

test_3

Antwort: HTTP/1.1 200 OK

test_4.php

<?php
header("Status: 404 Not Found");
echo 'Sending "Status: 404 Not Found"';
?>

Ergebnis:

test_4

Antwort: HTTP/1.1 404 Not Found

Lösung?

Wer kennt eine Lösung?

Install-Tool: pageNotFound_handling_statheader

Um zumindest beim pageNotFound-Handling einen zur Umgebung passenden Header zu senden, kann/sollte im Install-Tool der passende Wert eingetragen werden:pageNotFound_handling_statheader_2015-07-17 14-22-50

realURL

Auch realURL hat ein paar Fallstricke dabei:

Hinterlasse einen Kommentar.