error 200 statt 404 erzeugen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • error 200 statt 404 erzeugen

    Hallo zusammen,
    ich habe ein Problem mit HTTP-Headern.
    In meiner .htaccess rufe ich beim Fehler 404 ein Script missing.php auf, dass mir anhand der vorher aufgerufenen URL den richtigen Quelltext aus einer Datenbank liefert.

    #Error Documents
    ErrorDocument 401 /missing.php
    ErrorDocument 403 /missing.php
    ErrorDocument 404 /missing.php
    .....

    Damit die Suchmaschinen die Seiten auch indizieren, gebe ich am Anfang der missing.php mit
    PHP-Code:
    header('HTTP/1.1 200 OK'); 
    den ensprechenden header aus.
    Wenn ich die Seiten (hier ein Beispiel )
    aber mit Rex Swain's HTTP Viewer checke, kriege ich immer einen header 404.
    Anscheinend wird vorher schon ein header404 gesendet.
    Habe schon im Forum gesucht, aber dort gab es immer nur den umgekehrtes Fehler (200 gesendet statt 404)

    Woran kann das liegen? Wer kann mir helfen?
    Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

  • #2
    Re: error 200 statt 404 erzeugen

    Original geschrieben von thommyk
    In meiner .htaccess rufe ich beim Fehler 404 ein Script missing.php auf, dass mir anhand der vorher aufgerufenen URL den richtigen Quelltext aus einer Datenbank liefert.
    das klingt so, als ob du versuchst ein "umschreiben" von URLs wie bei mod_rewrite auf diesem wege zu "simulieren".

    wäre aber ein reichlich perverser ansatz ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Korrekt erfasst.

      aber wieso ist das pervers?

      Es ist einfacher, über die URL und eine md5-Prüfsumme den richtigen Quelltext aus der Datenbank zu holen, als einige tausend html.Seiten zu
      erzeugen mit entsprechenden Ordnern und Unterordnern.
      Oder das Ganze umständlich mit mod_rewrite zu machen.

      Ausserdem muss ich so nur den Quelltext der Seiten speichern, die auch wirklich besucht werden. Das reduziert den Speicherplatz enorm.

      Und was ist mit der Lösung des Problems?
      Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

      Kommentar


      • #4
        Kann es sein ... das Du mod_rewrite einfach nicht verstehst ... und deshalb vollkommen absurde Wege gehst?!
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          mod_rewrite verstehe ich schon.
          Meine Bilder verteile ich zum Beispiel auf verschiedene Unterordner, die mit
          den ersten 3 Ziffern aus einer sechsstelligen Nummer anfangen.

          #Ordner files/photos umleiten auf object_images/photos/XXX
          RewriteCond %{REQUEST_URI} ^/*files/photos/([\d]{6})_[\d]{2}\.(jpg|gif|png)$
          RewriteRule ^files/photos/([\d]{3})(.*)_(\d{2})\.(jpg|gif|png)$ /object_images/photos/$1/$1$2_$3.$4 [L]

          so viel zum Thema rewrite.
          Aber ich kann nicht für 300000 hml Seiten rewrite-regeln erstellen.
          Deshalb der Umweg über die missing.php und die Datenbank mit dem Quelltext.

          Ich will doch nur wissen, wass ich machen kann, damit beim Aufruf der missing.php ein header 200 zurückkommt anstatt ein 404?
          Was ich da sonst noch drin veranstalte, ist ziemlich egal.
          Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

          Kommentar


          • #6
            Original geschrieben von thommyk
            Aber ich kann nicht für 300000 hml Seiten rewrite-regeln erstellen.
            Deshalb der Umweg über die missing.php und die Datenbank mit dem Quelltext.
            und wo soll da der unterschied sein - ob du nun alles per mod_rewrite an ein script weiterleitest, oder dich dieser errordocument-krücke bedienst ... der aufwand ist doch in etwa der gleiche.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              ich will ja nicht alles auf das missing.php weiterleiten. Einige Seiten gibt es durchaus als richtige .html Seiten (z.B die Startseite, suche, impressum, agb, usw). Aber das ist der kleinere Teil.

              Alle Seiten, die einen Fehler auslösen, werden dann mit der missing abgefangen und versucht, den Quelltext in der Datenbank zu finden.

              Die ganzen Ausnahmen in einer rewrite-Regel zu definieren, ist erheblich aufwändiger als einfach ein ErrorDocument 404, was dann den rest bearbeitet.

              Warum muss ich mich eigentlich für meine Technik rechtfertigen?
              Es war doch eigentlich eine einfache Frage: Warum kriege ich bei einem
              Script fürs ErrorDocument keinen Header 200 hin, sondern immer nur einen 404??
              Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

              Kommentar


              • #8
                wahrscheinlich weil du in der missing.php zwar 200 schickst, aber der apache dann, so wie in der .htaccess definiert, einen 404 hinterherschickt und der letzte header eben gewinnt




                evtl. isses auch andersrum (erster header gewinnt und apache ist schneller)

                wie's auch ist: dein skript ist schwächer als apache


                mach doch für die existierenden seite (wenn's wirklich so viel weniger sind) jeweils eine RewriteRule und hintendran machst du
                Code:
                RewriteRule (.*) missing.php?$1
                (sinngemäß)
                Zuletzt geändert von mrhappiness; 13.10.2004, 13:54.
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Original geschrieben von thommyk
                  Warum muss ich mich eigentlich für meine Technik rechtfertigen?
                  Weil sie blödsinn ist ... und wie Du schon selbst festgestellt hast nicht so funktioniert ...
                  Original geschrieben von thommyk
                  Es war doch eigentlich eine einfache Frage: Warum kriege ich bei einem
                  Script fürs ErrorDocument keinen Header 200 hin, sondern immer nur einen 404??
                  ... rate mal ... !
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #10
                    Original geschrieben von mrhappiness
                    mach doch für die existierenden seite (wenn's wirklich so viel weniger sind) jeweils eine RewriteRule und hintendran machst du
                    Code:
                    RewriteRule (.*) missing.php?$1
                    (sinngemäß) [/B]
                    danke, mrhappiness. Daran habe ich auch schon gedacht.
                    Allerdings kann ich das ganze auch in der missing.php selbst machen und da ein array mit den vorhandenen Seiten reinschreiben und darauf weiterleiten.
                    PHP-Code:
                     if (in_array($_SERVER['REQUEST_URI'], $Page************ist)) {
                         include(
                    $_SERVER['REQUEST_URI']);
                          die();

                    Dann brauche ich als rewrite Regel nur die oben erwähnte Regel.

                    Andererseites funzt eine ähnliche technik auf einem anderen Server problemlos. (Also: ErrorDocument missing.php, in der missing wird die URL auseinandergenommen, ein header 200 geschickt und dann die Seite per php generiert). Deshalb frage ich mich, warum ich das dann nicht auch hinkriegen kann?
                    Wer´s nicht glaubt, soll mal http://www.touristonline.de/510322.html testen. Die Seite wird auch nur mit einer missing.php erzeugt und liefert einen Header 200.
                    Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                    Kommentar


                    • #11
                      mache es mit mod_rewrite und dem gegebenem beispiel.
                      was du dann in der missing.php (steich m setze p ) machst, ist doch völlig egal. da kannst du immer noch dein supertolles array einpflanzen.
                      aber IMHO ist die mod_rewrite dafür da und nicht ein errorhandler
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Lösung

                        Hier die Lösung, nur der Vollständigkeit halber
                        falls mal jemand hier suchen sollte

                        #alle vorhandenen Dateien aufrufen ausser der missing.php
                        RewriteCond %{REQUEST_URI} !/missing.php
                        RewriteCond %{REQUEST_FILENAME} -f
                        RewriteRule ^(.+) $1 [L]

                        #Rest ausser robots txt auf missing.php umleiten
                        RewriteCond %{REQUEST_URI} !/missing.php
                        RewriteCond %{REQUEST_URI} !.*robots.txt$
                        RewriteRule (.*) /missing.php?URI=$1&HOST=%{HTTP_HOST} [L]

                        URI und HOST sind dann als GET-Variablen vorhanden.
                        Liefert dann einen schönen Header 200.
                        Vielen Dank für die guten Tipps
                        Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                        Kommentar

                        Lädt...
                        X