Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
04.08.2006, 17:07
kingduevel



Situation:
Ich habe eine index.php mit einem großen switch-case für alle Unterseiten. Als Default wird dabei die startseite.php includet.
Quellcode:[anderer Quellcode]
<?php
switch($_GET['area']) {
case "startseite": include("startseite.php"); break;
[weitere cases]
case "fehler": include("fehler.php"); break;
default: include("startseite.php");
}
?>
[anderer Quellcode]
Dazu habe ich noch eine htaccess-Datei, die mir das Umschreiben der URLs übernehmen soll.
Quellcode:ErrorDocument 400 /fehler_400.html
ErrorDocument 401 /fehler_401.html
ErrorDocument 403 /fehler_403.html
ErrorDocument 404 /fehler_404.html
ErrorDocument 500 /fehler_500.html
RewriteEngine on
RewriteRule ^fehler_(.*).html$ index.php?area=fehler&subarea=$1
RewriteRule ^(.*).html$ index.php?area=$1
In der entsprechenden fehler.php sind die Fehlerarten natürlich wieder in einem switch-case geregelt.

Problem:
Gebe ich jetzt keine korrekte sondern eine falsche URL in den Browser ein (zum Beispiel "www.meineadresse.de/seitegibtsnicht.html"), passiert folgendes: ModRewrite ändert intern die URL in "www.meineadresse.de/index.php&area=seitegibtsnicht" um und das ruft den Default des switch-case in der index.php auf den Plan.

Frage:
Wie kann ich korrekte Fehlermeldungen passend auf meine Seite einbauen?

--


Dieser Beitrag wurde am 04.08.2006 um 17:11 von no.plan bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
04.08.2006, 17:31
theDon



header() und den entsprechenden Fehlercode senden?

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
002
04.08.2006, 20:03
scus



du könntest am anfang sowas reintuen:

PHP-Quellcode:<?php
if( !in_array($_GET["area"], $array_mit_allen_validen_seiten) ) {
  
$_GET["area"] = "fehler";
  
$_GET["subarea"] = "404";
}
?>

--

sincères amitiés scus
--
Tand, Tand ist das Gebilde von Menschenhand

zum Seitenanfang zum Seitenende Profil || Suche
003
05.08.2006, 14:55
kingduevel



@scus: das dürfte meinen anforderungen nicht genügen. ist zwar eine simple lösung, aber die unterschlägt ja komplett die anderen fehlermeldungen und alle validen URLs möchte ich da nicht von hand eintippen.

@thedon: ui, mit headern hab ich noch nicht gearbeitet. könntest du (oder jemand anderes) mir nen code posten?
und alternativ sehe ich grade auf modrewrite.de, ob mein problem vielleicht mit den ausdrücken -U und -F gelöst werden könnte?

--

zum Seitenanfang zum Seitenende Profil || Suche
004
05.08.2006, 15:01
theDon



-U und -F loesen dein Problem eher nicht.

Setze dein PHP-Script als Fehlerseite und sorge dafuer, dass das im Zweifelsfall nicht auf die Startseite zurueckfaellt, sondern eine Fehlerseite anzeigt. Bevor du diese Fehlerseite ausgibst, schickst du den entsprechenden Fehlercode, zum Beispiel:

PHP-Quellcode:<?php
header
("HTTP/1.0 404 Not Found");
?>

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
005
05.08.2006, 19:07
kingduevel



ganz ehrlich?! so richtig verstanden habe ich es noch nicht.
du meinst als default im switch-case der index.php soll ich die fehler.php includen. aber muss ich die fehler dann nicht manuell übergeben? oder woher weiß der server, dass es sich statt fehler 404 nicht um fehler 403 handelt?!

mag ich auch etwas verpeilt sein, aber ein umfangreicheren quellcode würde ich begrüßen *dackelblick*.

--

zum Seitenanfang zum Seitenende Profil || Suche
006
05.08.2006, 21:40
theDon



Bei deiner Rewrite-Regel werden die Fehlerseiten eh nicht erreicht, weil saemtliche Requests auf dein Skript umgeleitet werden. Folglich musst du auch da entscheiden, ob das nun ein gueltiger Request ist oder nicht. Falls nein, kannst du einen Fehler senden, sonst laesst du es besser bleiben.

Aber mal ganz was anderes: So richtig sinnvoll ist dein Ansatz nicht. Pack die einzelnen Seiten in einzelne Skripte, dann kannst du auch Apache die Fehlerbehandlung ueberlassen und brauchst Rewrite im Idealfall ueberhaupt nicht.

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
007
10.08.2006, 14:51
kingduevel



Okay, mein Problem ist gelöst. Habe es nicht mit nem header() gemacht, sondern - wie theDon vorschlug - als default im switch-case der index.php die fehler.php includet. Ich weiß zwar nicht, ob neben Fehler 404 und 401 auch die anderen Fehler so erkannt werden, aber es funktioniert und ich bin damit sehr zufrieden. Vielen Dank an alle :) .

--

zum Seitenanfang zum Seitenende Profil || Suche
008
10.08.2006, 22:10
Chronial



Falls es dich interessiert, wie es "richtig" (die in den meisten Aspekten optimalste mir bekannte Lösung - für die Genauen ;) geht:
Du nimmst als ErrorDocument für alle Fehler dein Fehler.php Script. Da kannst du dann alle möglichen Infos aus der $_SERVER Variable holen. Die Fehlernummer steht in $_SERVER["REDIRECT_STATUS"], die eigentlich aufgerufene Seite in $_SERVER["REQUEST_URI"].

Was theDon mit seinem header() will macht keinen Sinn ^^. Ich vermute mal er ist hier einfach Opfer einer Falschannahme geworden. Wenn ein Fehler passiert musst du das natürlich dem Browser über einen header mitteilen. Das macht der Apache aber automatisch. TheDon dachte wohl, dass er das nicht macht, wenn du ein Script als Fehlerseite einsetzt - tut er aber.

Du musst bei der ganzen sachen aber auf einen IE-Bug (?Feature?) achtgeben: Wenn eine Fehlerseite zu klein ist (weis nichtmehr, wieviele byte sie haben muss) bringt der IE in Standartkonfiguration (kann man glaub irgendwo ausstellen) seine eigene Fehlerseite. Musst du einfach mal testen - wenn er das macht, füll deine Seite einfach mit nem html-kommentar das irgendeinen crap enthält (ne gute Stelle um über die IE und MS herzuziehen ;)-

--

"tsuji-giri" (japanisch) - ein neues Schwert an einem Passanten ausprobieren

zum Seitenanfang zum Seitenende Profil || Suche
009
10.08.2006, 23:27
theDon



Zitat:
Chronial postete
Wenn ein Fehler passiert musst du das natürlich dem Browser über einen header mitteilen. Das macht der Apache aber automatisch. TheDon dachte wohl, dass er das nicht macht, wenn du ein Script als Fehlerseite einsetzt - tut er aber.
In Verbindung mit der RewriteRule da oben tut er das nicht, weil das Fehlerscript nie aufgerufen wird.

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche