Seite 1 von 2

echter 404-Browserfehler per http-Header

Verfasst: 18.03.2006 12:24
von Dungeonwatcher
Hi! 8)

Ich hätte da einen Vorschlag für einen neuen Mod:

Seit Wochen wühlt sich Google durch mein Forum, was ja auch sehr löblich ist, nur leider hat Google teilweise eine wirre Vorstellung von den zu besuchenden Links und ruft z.B. viewtopic.php?t99 statt viewtopic.php?t=99 auf.

phpBB bringt in so einem Fall ja eine Seite mit dem Text: "Das gewählte Thema oder der Beitrag existiert nicht." bzw. "Das ausgewählte Forum existiert nicht.". Wie bekomme ich nun einen echten 404-Browserfehler in http-Header?
Google hat geschrieben:Wir akzeptieren Ihre Anforderung zum Entfernen nur, wenn die Seite in einem echten 404-Browserfehler über die http-Header zurückgibt. Stellen Sie sicher, dass Sie einen echten 404-Browserfehler zurückgeben, auch wenn Sie einen benutzerfreundlicheren Abschnitt "body" der HTML-Seite für Ihre Besucher anzeigen. Eine Seite, die "Datei nicht gefunden" zurückgibt, wenn die http-Header nach wie vor den Statuscode 200 oder einen normalen Code zurückgeben, ist in diesem Fall nicht hilfreich.
Andererseits wäre ein weiterleiten auf die index.php auch nicht verkeht.

Nur wie stelle ich das an? Es gibt keine .htaccess und auch der Server selber kann/soll dies nicht tun.

Diese o.g. Meldung wird ja durch die viewforum.php bzw. viewtopic.php angestossen und in der functions.php erstellt. Jetzt muss diese Meldung quasi abgefangen und der Standard Header ergänzt oder ersetzt werden.

Wer traut sich diese Aufgabe zu und baut diesen Mod? 8)

Bye/2

Verfasst: 18.03.2006 13:12
von fanrpg
öffne viewtopic.php

suche:

Code: Alles auswählen

if (!$topic_id && !$post_id)
{
	message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
}
ersetze mit:

Code: Alles auswählen

if (!$topic_id && !$post_id)
{
	header("HTTP/1.1 404 Not Found");
         redirect(append_sid('index.' . $phpEx );
}
suche:

Code: Alles auswählen

if ( !($forum_topic_data = $db->sql_fetchrow($result)) )
{
	message_die(GENERAL_MESSAGE, 'Topic_post_not_exist');
}
ersetze mit:

Code: Alles auswählen

if ( !($forum_topic_data = $db->sql_fetchrow($result)) )
{
	header("HTTP/1.1 404 Not Found");
         redirect(append_sid('index.' . $phpEx));
}
öffne viewforum.php

suche:

Code: Alles auswählen

else
{
	message_die(GENERAL_MESSAGE, 'Forum_not_exist');
}
ersetze mit:

Code: Alles auswählen

else
{
	header("HTTP/1.1 404 Not Found");
         redirect(append_sid('index.' . $phpEx));
}
suche:

Code: Alles auswählen

if ( !($forum_row = $db->sql_fetchrow($result)) )
{
	message_die(GENERAL_MESSAGE, 'Forum_not_exist');
}
ersetze mit:

Code: Alles auswählen

if ( !($forum_row = $db->sql_fetchrow($result)) )
{
	header("HTTP/1.1 404 Not Found");
         redirect(append_sid('index.' . $phpEx));
}
Das dürfte an sich eigentlich reichen.

Verfasst: 18.03.2006 13:27
von Dungeonwatcher
Hui, das ging ja fix. :)

Ein kleiner Fehler hat sich hier eingeschlichen:

Code: Alles auswählen

if (!$topic_id && !$post_id)
{
	header("HTTP/1.1 404 Not Found");
         redirect(append_sid('index.' . $phpEx );
}
Hier fehlt in der vorletzten Reihe noch ein abschliessendes ")". Dann funktioniert die Weiterleitung perfekt. Supergroßen DANK :)

Wie kann ich jetzt noch testen ob der passende Headereintrag auch versendet wird/wurde?

Nachtrag:

Kaum war dies im Forum eingetragen tauchte auch schon Google auf und wurde erfolgreich auf die index.php umgeleitet. <riesig freu> 8)

Verfasst: 18.03.2006 13:46
von fanrpg
http://www.andyhoppe.com/software/http- ... header.htm
Damit gucke ich mir immer den HTTP Header an, geht relativ fix.

Verfasst: 18.03.2006 13:59
von Dungeonwatcher
Jou, die Seite merke ich mir.

Der test ergab folgendes:
Folgende HTTP-Header wurden vom Server gesendet:
(Bei Klick auf eine Zeile springt der Browser auf die Erklärung dazu.)

1. HTTP/1.0 301
2. Content-type: text/html; charset=iso-8859-1
3. Location: http://dungeon-bbs.homeip.net/forum/index.php
Nun ist die 301 ja das Ergebnis der Umleitung. Das würde bedeuten das die 404 garnicht gesendet oder ignoriert wurde. Dann werde ich die die 404 in den Änderungen mal in 301 ändern.

Verfasst: 18.03.2006 14:06
von fanrpg
ändere übermal das:

Code: Alles auswählen

   header("HTTP/1.1 404 Not Found"); 
         redirect(append_sid('index.' . $phpEx));
in das um:

Code: Alles auswählen

header("HTTP/1.1 404 Not Found"); 
header("Location: ".$phpbb_root_path."index.".$phpEx);
Das dürfte den Fehler beseitigen.

Verfasst: 18.03.2006 14:23
von Dungeonwatcher
Neee, es bleibt beim 301. Das dürfte aber wohl daran liegen, das ja gleich die index.php gesendet wird und da wäre der 301 ja wohl auch korrekt, oder?

Verfasst: 18.03.2006 17:52
von fanrpg
Nein da wäre 200 ok.
Hm..

tausch mal den Block gegen den hier aus:

Code: Alles auswählen

header("Location: ".$phpbb_root_path."index.".$phpEx);
header("HTTP/1.0 404 Not Found");

Verfasst: 18.03.2006 18:46
von Dungeonwatcher
fanrpg hat geschrieben:Nein da wäre 200 ok.
Hm..
Es bleibt beim 301. :roll:

Verfasst: 28.03.2006 14:33
von dennist
Hallo,

ich habe ein ähnliches Problem.

Um eine Seite aus dem google cache und den Suchergebnissen zu bekommen muss ein 404 Fehlercode erzeugt werden.

Für mich wäre es wirklich wichtig, da sonst rechtliche Schwierigkeiten drohen.

Die Frage klingt zwar komische aber:
Wie bekomme ich diesen 404 Fehler hin?

Tausend Dank an den, der mir helfen kann.


Gruß Dennis