Zum Inhalt springen

Eigene 404-Fehlerseiten mit RealUrl

Erstellt am 8. November 2005 · 14 Antworten · letzte Antwort am 27. Januar 2008

Tags: Frage

Waveshaper ·

gibt es eine Möglichkeit, mit RealUrl eigene 404-Fehlerseiten zu definieren, die auf eine Page-ID verweisen? Vielleicht hat das schon jemand gemacht und hat per zufall ein script..
ich habe auch schon nach einer extension gesucht, doch die funktioniert nicht mit simulate static documents, also bezweifle ich, dass sie realurl auch geht..

vielen dank für eure tipps

Waveshaper ·

ok, hab nochmals im forum gesucht... ich hab jetzt einfach mal ein domain-record auf meiner site angelegt. gibt jemand also eine adresse ein, die auf eine datei oder einen ordner verweiste, die nicht existiert, wird der oder die besucher/in automatisch auf die startseite verwiesen. fürs erste in ordnung, aber eleganter wäre es schon, wenn der oder die userIn erfahren würde, weshalb er/sie plötzlich auf der startseite landet... gruss, waveshaper

woida ·

ganz einfach:
Im Install-Tool den
[pageNotFound_handling_statheader] auf

HTTP/1.0 404 Not Found

setzen und [pageNotFound_handling] auf

USER_FUNCTION:fileadmin/scripts/pageNotFoundHandling.php:user_pageNotFound->pageNotFound
<?php
class user_pageNotFound {
    function pageNotFound($param,$ref) {
        print "<html>\n<head>\n<title>404 Not found</title>\n";
        print "<meta http-equiv=\"refresh\" CONTENT=\"0;URL=http://www.domain.de/404.html\">\n";	
        print "</head>\n<body>\n";
        print "<h1>Die Seite wurden nicht gefunden</h1>\n";
	print "<!--
	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
    	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
    	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
    	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
	    Das ist ein Platzhalter\n	    
    	    Das ist ein Platzhalter\n
	    Das ist ein Platzhalter\n
	-->";
        print "</body>\n</html>\n";
    }
}
?>

Die Kommentare "Das ist ein Platzhalter" sind wichtig: Der IE stellt seiten unter x Byte (weiß die Zahl grad nicht) nicht dar, sondern präsentiert eine eigene Fehlermeldung. Durch die Kommentare wird sichergestellt, daß diese Seite auch wirklich dargestellt wird und die weiterleitung auch funktioniert.

Das schöne an der Lösung ist, ist daß der Nutzer eine 404er bekommt (wichtig für Suchmaschinen, bei der Umstellung von URLs)

Waveshaper ·

Danke erstmals für das Script. Nun habe ich trotzdem noch eine Frage bezüglich deinem script: kann ich denn anstelle einer statischen auch eine dynamische, von typo3-erzeugte seite, als reload parameter angeben? wäre wirklich gut.

gruss. waveshaper

woida ·

Die 404.html ist eine von Typo erzeugte Seite. In Wirklichkeit (ohne RealUrl) heißt die bei mir index.php?id=41

Waveshaper ·

ok, habs jetzt mal versucht. irgendwie scheint das jedoch nicht zu klappen. es erscheint jedenfalls wieder die typo3-eigene 404-seite.. naja, werde das wohl nochmals genauer unter die lupe nehmen. im script jedenfalls konnte ich keinen fehler entdecken.

Waveshaper ·

folgende message erscheint bei mir, wenn ich eine seite aufrufe, die nicht existiert.

The requested page did not exist or was inaccessible. For this domain
domi.cc
no error-page is defined.
Please check the domain-record

muss ich evt. noch einen zusätzlichen eintrag bei meiner domain schreiben??? das redirect auf die startseite habe ich entfernt.

Waveshaper ·

ich habe nun wieder die extension custom 404 error handling installiert.
funktioniert absolut prima mit RealUrl.

eigentlich hätte ich das von anfang probieren sollen, aber ich dachte, wenn diese extension mit simulate_static_documents nicht funktioniert, dass es dann mit realurl wohl auch nicht geht.

dieser thread kann nun meiner meinung nach geschlossen werden...

wanky ·

Ich habe heute versucht die oben aufgeführte Lösung von woida auf mehrere Domains anzuwenden. Eine Lösung dafür wäre:

<?php

	class user_pageNotFound {

    function pageNotFound($param,$ref) {
	 	$headers = apache_request_headers();
		$dn = $headers[Host];
        print "<html>\n<head>\n<title>404 Not found</title>\n";
		  if ($dn=="www.domain.de"){
        		print "<meta http-equiv=\"refresh\" CONTENT=\"0;URL=http://$dn/deineFehlerseite.html\">\n";      
		  }else{
		  		print "<meta http-equiv=\"refresh\" CONTENT=\"0;URL=http://$dn/deineAndereFehlerseite.html\">\n";
		  }
        print "</head>\n<body>\n";
		  echo $dn;
		  
        print "<h1>Die Seite wurden nicht gefunden</h1>\n";
        print "<!--
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n      
            Das ist ein Platzhalter\n
            Das ist ein Platzhalter\n
        -->";
        print "</body>\n</html>\n";
		  
    }
}


?>

Bei mehr als zwei Domains einfach weiter if-Abfragen einfügen.
Habe diesen Lösungsweg gewählt, weil die Extension "error_404_handling" nicht funktioniert hat und der Lösungsansatz in [HowTo] Multidomain 404 Fehlerseiten(#42188) auch nicht lief.

igorshmigor ·

Schönes Ding, Wanky! Genau das brauche ich gerade.
Überhaupt ein toller Thread.
Die Extension error_404_handling hat bei mir nicht geklappt.

Ich empfehle übrigens

	header("Location: http://www.meinedomain.de/meinefehlerseite");

statt

        print "<meta http-equiv=\"refresh\" CONTENT=\"0;URL=http://www.meinedomain.de/meinefehlerseite\">\n";

Dann kann man sich den ganzen Print-Wust sparen und die Umleitung erfolgt sofort ohne für Sekundenbruchteile noch einen häßlichen Warnhinweis "Die Seite wurden nicht gefunden" auszugeben.
Mein ganzes Skript lautet jetzt nur noch:

<?php
class user_pageNotFound {
    function pageNotFound($param,$ref) {
	header("Location: http://www.meinedomain.de/meinefehlerseite");
    }
}
?>

Das ist doch viel schöner.

igorshmigor ·

ein Problem habe ich allerdings noch:
Seiten im Stil von www.meinedomain.de/seitegibtsnicht.html werden korrekt umgeleitet. Seiten mit ungültiger ID ebenfalls.
Aber Seiten ohne .html oder mit gibtsnicht.php geben mir nur eine Standard-Fehlerseite mit dem Text "Not Found
The requested URL /gibtsnicht.php was not found on this server."
😢

igorshmigor ·

Hmm, gut, habe ich jetzt mit einem Eintrag in die .htaccess Datei auch hinbekommen:

ErrorDocument 404 /index.php?id=188
ErrorDocument 500 /index.php?id=188

Das funktioniert dann aber natürlich nur für eine Domain. Ich hätte so gerne eine Lösung für mehrere Domains.

StefanKr ·

Dieser Thread hat mir zur Lösung verholfen, aber erst, nachdem ich einige Fehlversuche hinter mir hatte. Für Leidensgenossen schildere ich jetzt meinen Lösungsweg, auch wenn manches davon in vorigen Beiträgen schon erwähnt wurde. Ich bitte vorab um Nachsicht, dass manches eventuell den TYPO3 Profis die Haare zu Berge stehen läßt, ich kann nur sagen, das ist die Lösung die bei mir funktioniert, alles andere hat Stunden vergeblicher Mühen gekostet. Ganz besonders die Konfiguration von realurl und der .htaccess hat mich vor einigen Wochen fast zur Verzweiflung getrieben, deswegen wollte ich dort nichts verändern. Also...

Ich nutze TYPO 4.0.2 mit realurl 1.1.1 und realurlmanagement 0.3.1. Unter id=764 habe ich eine eigene Error-Seite eingerichtet (siehe http://www.ahden.de). Der Inhalt von .htaccess ist

RewriteEngine On

ErrorDocument 404 /index.php?id=764
ErrorDocument 500 /index.php?id=764

RewriteRule ^typo3$ - [L]
RewriteRule ^typo3/.*$ - [L]
RewriteRule ^uploads/.*$ - [L]
RewriteRule ^fileadmin/.*$ - [L]
RewriteRule ^typo3conf/.*$ - [L]

RewriteCond %{REQUEST_FILENAME}/index.html -f
RewriteRule / %{REQUEST_URI}/index.html [L]

RewriteCond %{REQUEST_FILENAME}/index.htm -f
RewriteRule / %{REQUEST_URI}/index.htm [L]

RewriteCond %{REQUEST_FILENAME}/index.php -f
RewriteRule / %{REQUEST_URI}/index.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /index.php [L]

Zeile 3+4 haben übrigens keine Auswirkung, wenn ich sie weglasse, ändert sich nichts. Aber ich lasse es sicherheitshalber mal drin. Im Install Tool habe ich unter [pageNotFound_handling_statheader] den Wert "HTTP/1.0 404 Not Found" und in [pageNotFound_handling] den Wert "USER_FUNCTION:fileadmin/scripts/pageNotFoundHandling.php:user_pageNotFound->pageNotFound" eingetragen. Die Datei pageNotFoundHandling.php mit dem Inhalt

<?php
class user_pageNotFound {
    function pageNotFound($param,$ref) {
        header("Location: http://www.ahden.de/index.php?id=764");
    }
}
?>

habe ich in ../fileadmin/scripts abgelegt. Es scheint jetzt zu funktionieren.

Die Extension error_404_handling Version 0.1.1 hatte ich ausprobiert, danach lief gar nichts mehr, selbst der Aufruf der Homepage funktionierte nicht mehr. Die Anleitung von Dimitry Dulepov funktionierte auch nicht. Jedenfalls bei mir nicht.

mcc ·

Hallo und danke für die guten Hinweise. Ich hab es nach igorshmigors Vorlage jetzt so implementiert:

<?php
  class user_pageNotFound {
	function pageNotFound($param, $ref) {
		header("Location: /404.html");
		}
	}
?>

Das funktioniert so auch in Multidomain-Umgebungen - Voraussetzung ist natürlich jeweils eine eigene Seite "404".

Das Ganze hat auch wesentlich kürzer funktioniert mit:

<?php
		header("Location: /404.html");
?>

Aber ich bin nicht sicher, ob die obigen Parameter evtl. wichtig sind. (Fang grad mit PHP ein wenig an...)

Viele Grüße
Christian

P.S.: ich nutze realurl und zwei Domains