Sebastian Salzgeber: Apache mod_rewrite → HTTP-ErrorDocuments intern umleiten

Hallo zusammen

Ich schreibe gerade an einer .htaccess und würde gerne wissen, ob es möglich ist, wenn mir Apache einen Status 400,401,403,404 oder 500 zurückgibt, diesen nicht extern sondern lediglich intern umzuleiten; Die URL also bleibt und lediglich intern das gewünschte Dokument geholen wird.

Bisher nutze ich immer etwas wie das hier:

ErrorDocument 400 /errors/badrequest.html
ErrorDocument 403 /errors/forbid.html

Doch weist dies (soweit ich das sehe) auch den Browser an, die URL zu ändern. Das möchte ich nicht.

Kann mir jemand sagen ob ich es vielelicht mittels mod_rewrite und einer Regel vielleicht irgendwie abfangen kann und bloss intern das passende Dokument anfordern kann? Hilft REDIRECT_STATUS? Wie sähe sowas aus?

Danke im Vorraus

Grüße
Sebastian S.

  1. Moin!

    Ich schreibe gerade an einer .htaccess und würde gerne wissen, ob es möglich ist, wenn mir Apache einen Status 400,401,403,404 oder 500 zurückgibt, diesen nicht extern sondern lediglich intern umzuleiten; Die URL also bleibt und lediglich intern das gewünschte Dokument geholen wird.

    Bisher nutze ich immer etwas wie das hier:

    ErrorDocument 400 /errors/badrequest.html
    ErrorDocument 403 /errors/forbid.html

    Doch weist dies (soweit ich das sehe) auch den Browser an, die URL zu ändern. Das möchte ich nicht.

    Nein, das ist falsch. Wenn du das wie oben anwendest, bleibt die aufgerufene URL im Browser bestehen, diese Fehlerseiten (die auch Skripte sein können) werden unter dieser fehlerhaften URL aufgerufen und können die URL auf verwenden und auswerten, um irgendwelche Aktionen zu starten.

    Hätte dir aber eigentlich auch auffallen müssen - wobei 400 und 403 keine wirklich alltäglichen Error-Codes sind, aber bei 404 wäre es offensichtlich.

    Kann mir jemand sagen ob ich es vielelicht mittels mod_rewrite und einer Regel vielleicht irgendwie abfangen kann und bloss intern das passende Dokument anfordern kann? Hilft REDIRECT_STATUS? Wie sähe sowas aus?

    Das ist also obsolet.

    - Sven Rautenberg

    1. Hallo Sven

      Ah, tatsache. Ich habe mir Lösing quasi selbst gegeben als ich schrieb:

      ErrorDocument 400 /errors/badrequest.html

      da ich eigentlich in wirklichkeit immer schrieb:

      ErrorDocument 400 http://www.example.com/errors/badrequest.html

      Und da macht er eben den kompletten redirect. Ich dachte ich könnte mir *.com sparen und habe damit die Lösung schon vor meinen Augen gehabt :D

      Danke für dein drauf tippen.

      Grüße
      Sebastian S.

      Moin!

      Ich schreibe gerade an einer .htaccess und würde gerne wissen, ob es möglich ist, wenn mir Apache einen Status 400,401,403,404 oder 500 zurückgibt, diesen nicht extern sondern lediglich intern umzuleiten; Die URL also bleibt und lediglich intern das gewünschte Dokument geholen wird.

      Bisher nutze ich immer etwas wie das hier:

      ErrorDocument 400 /errors/badrequest.html
      ErrorDocument 403 /errors/forbid.html

      Doch weist dies (soweit ich das sehe) auch den Browser an, die URL zu ändern. Das möchte ich nicht.

      Nein, das ist falsch. Wenn du das wie oben anwendest, bleibt die aufgerufene URL im Browser bestehen, diese Fehlerseiten (die auch Skripte sein können) werden unter dieser fehlerhaften URL aufgerufen und können die URL auf verwenden und auswerten, um irgendwelche Aktionen zu starten.

      Hätte dir aber eigentlich auch auffallen müssen - wobei 400 und 403 keine wirklich alltäglichen Error-Codes sind, aber bei 404 wäre es offensichtlich.

      Kann mir jemand sagen ob ich es vielelicht mittels mod_rewrite und einer Regel vielleicht irgendwie abfangen kann und bloss intern das passende Dokument anfordern kann? Hilft REDIRECT_STATUS? Wie sähe sowas aus?

      Das ist also obsolet.

      • Sven Rautenberg
      1. Hallo,

        ErrorDocument 400 http://www.example.com/errors/badrequest.html
        Und da macht er eben den kompletten redirect.

        ja, richtig - deswegen sollte man es nach Möglichkeit vermeiden, Error-Dokumente als URL anzugeben. Dann bekommt nämlich auch der Client (Browser, Googlebot o.ä.) keine Information, dass irgendein Fehler aufgetreten sei, sondern nur ein HTTP-Redirect, und das daraufhin angeforderte Error-Dokument wird dann mit Status 200 (OK) ausgeliefert.

        Analogie: Du gehst in eine Buchhandlung und fragst nach einer Straßenkarte von Litauen. Anstatt dir zu sagen: "Sorry, haben wir nicht", notiert die nette Verkäuferin dir eine ISBN und schickt dich zum nächsten Laden um die Ecke. Dort zeigst du den Zettel mit der ISBN, und der freundliche Inhaber verkauft dir eine topographische Karte von Israel.
        Du freust dich, weil alles gut gegangen ist, und hast doch nicht das, was du eigentlich wolltest.

        Moin!
        [...]

        • Sven Rautenberg

        Und nächstes Mal bitte kein TOFU! Danke.

        So long,
         Martin

        --
        Most experts agree: Any feature of a program that you can't turn off if you want to, is a bug.
        Except with Microsoft, where it is just the other way round.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(