MyBB.de Forum
Ajax mit htaccess ErrorDocument Problem - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Sonstiges (https://www.mybb.de/forum/forum-1.html)
+--- Forum: Programmierung (https://www.mybb.de/forum/forum-32.html)
+--- Thema: Ajax mit htaccess ErrorDocument Problem (/thread-32957.html)



Ajax mit htaccess ErrorDocument Problem - Devidra - 09.12.2015

Wie im Titel beschrieben, hab ich ein Problem damit, ich weiß nicht ob ich den Baum vor lauter Bäume nicht sehe oder die späte Uhrzeit mich wieder umhaut  Toungue

Erklärung: 

Ich benutze ein selbstgeschriebenes Ajax Prinzip, damit der Content reloaded wird und nicht die ganze Seite

Ebenfalls funktioniert dort alles, jedenfalls bis ein User mal "kein" javascript aktiv hat


Die Seite läuft mit oder ohne Javascript, bis auf diesen kleinen schönheitsfehler, da ich nicht weiß wie dies mit htaccess geregelt werden kann, hab ichs mit PHP versucht

Es funktioniert, doch leider dann die Ajax Variante nichtmehr, also kommen wir nun zum genauen Problem

Problem:

Ajax lädt Link, wertet den Zugriff aus, sollte 404 Fehler kommen, wird die Error Seite eingeblendet mit den Parameter "?id=XYZ"

URL wird ebenfalls umgeschrieben zu "/error/?id=XYZ"

Ohne Javascript, lädt die Error Seite, per ".htaccess - ErrorDocument", Fehlermeldung wird korrekt ausgegeben, doch die URL updatet sich nicht

Wichtigste Codestellen:

Error-Seite ( hier ist nur testweise wenig definiert )
PHP-Code:
           if (isset($_GET["id"]))
               {
                   switch ($_GET["id"]) {
                       case 0:
                           echo "Timeout";
                           break;
                       case 404:
                           echo "Not Found";
                           break;
                       case 403:
                           echo "Forbidden";
                           break;
                       default:
                           echo "Keins";
                   }
               }
               elseif (isset($_SERVER["REDIRECT_STATUS"])) {
                   //header("LOCATION: /error?id={$_SERVER["REDIRECT_STATUS"]}");
                   echo $_SERVER["REDIRECT_STATUS"];
               

Ajax  Error-Teil
PHP-Code:
                   // Ajax Fehlermeldungen definieren
                       // Timeout nach 10 Sekunden ausgeben
                           timeout10000,
                       // Fehlermeldungen erfassen und auswerten
                           error : function(jqXHRtextStatuserrorThrown) { 
                               // Konsole um Fortschritt zu vermerken
                                   console_log("Error: " "\"" jqXHR.status " - " errorThrown "\"" " detected on " "\"" URL "\"""red");
                               // Lädt die Fehlerseite im Container
                                   jQuery(ajaxContainer).load("/error/" ajaxContent "?id=" jqXHR.status);
                               // Schreibt die URL des Inhalts in die Adresszeile
                                   history.pushState('','',"/error/?id=" jqXHR.status);
                           }, 

.htaccess
PHP-Code:
ErrorDocument 400 /error/
ErrorDocument 401 /error/
ErrorDocument 402 /error/
ErrorDocument 403 /error/
ErrorDocument 404 /error/
ErrorDocument 500 /error

Da ich mit der ".htaccess" recht wenig anfangen kann, bin ich überfragt ob es dort nicht eine einfache Lösung gibt

wenn in der Error Seite der "header" Teil wieder "aus"auskommentiert wird, passiert das was ich oben bereits scheib, Ajax würde die Fehlerseite nichtmehr laden sondern die Seite direkt aufrufen, die im HREF drinne steht

Jetzt hingegen wird alles richtig geladen, nur halt die URL wenn Javascript deaktiviert ist macht mir Probleme

DANKE, dass sich einer überhaupt die mühe machte das hier zu lesen und evt. eine Lösung hierfür zu haben, vorallem wenn es mit der ".htaccess" zu tuen hat wäre ich echt dankbar, gibt auch Kekse und Küssen  Big Grin

PS: Falls noch Fragen offen sind oder ich vergessen hab was zu erwähnen/aufzulisten, bitte schreiben


RE: Ajax mit htaccess ErrorDocument Problem - StefanT - 09.12.2015

Wenn ich deinen Code richtig verstehe, wird nur weitergeleitet, wenn $_SERVER["REDIRECT_STATUS"] gesetzt wird? Ist dies der Fall?


RE: Ajax mit htaccess ErrorDocument Problem - Devidra - 09.12.2015

Genau

Leitet weiter mit REDIRECT_STATUS
PHP-Code:
ErrorDocument 404 /error

Erkennt Redirect Status und gibt Fehler aus
HEADER LOCATION sollte dafür dienen das die URL richtig gesetzt wird
Zurzeit gibt er nur den Error Code aus ( welche auch richtig sind )
PHP-Code:
elseif (isset($_SERVER["REDIRECT_STATUS"])) {
 
                   //header("LOCATION: /error?id={$_SERVER["REDIRECT_STATUS"]}");
                   echo $_SERVER["REDIRECT_STATUS"];
               

Wenn ich nun nicht so penibel wäre und auf die URL anzeige bestehen würde wäre ja schon alles korrekt

DOCH, da diese aktion nur geschieht wenn Javascript deaktiviert ist, kann ich jenes auch nicht benutzen

Edit: Ich frag mich wieso ErrorDocument nicht direkt auf die gesagt URL weiterleitet, sonst würde der PHP Redirect nicht gebraucht, aber so lädt er weiterhin die URL die aufgerufen wird ( localhost/irgendwas/nichtvorhanden ) anstatt die Error URL ( localhost/error/?id=XYZ )

Ich glaube wenn es keine richtige Lösung gibt, werd ich dies einfach so lassen, sieht zwar nicht schön aus und ich müsste doppelt einstellen

1: Wenn die ID über Ajax läuft ( ist ja oben schon richtig )
2: Wenn über ein Redirect dies geschieht


RE: Ajax mit htaccess ErrorDocument Problem - Devidra - 09.12.2015

Habe einen groben Denkfehler

Wenn der Error über Ajax geschieht, bekommt er ja die Error + ID URL, dies soll ja so geschehen da dort keine permanente neue Seite geladen wird

Somit kann man, wenn man auf einen "Defekten" Link klickt, doch nichts falschmachen

WENN aber Javascript ausgeschaltet ist, man aber nur "error/?id=XYZ" sieht, ebenfalls kleinere Leute haben selten Ahnung, darum wäre die URL beizubehalten nicht verkehrt

Viele wissen dann nichtmal mehr, wo sie draufgeklickt haben oder andere Situationen..

Ich denke, das hat sich hiermit geklärt Wink

Schönheit != Effektiv