Apache mod_rewrite → HTTP-ErrorDocuments intern umleiten
Sebastian Salzgeber
- webserver
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.
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.htmlDoch 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
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.htmlDoch 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
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