Umleitung für nicht vorhandene Dateien
Norbert Kölln
- webserver
0 jobo0 jobo0 suit0 Norbert Kölln0 jobo
0 Sven Rautenberg0 jobo
Moin, moin!
Ich habe nur begrenzten Platz auf einem Server und möchte einige große Dateien auf einen anderen auslagern. Um Links etc. nicht ändern zu müssen, stelle ich mir folgendes vor:
Definition einer Regel, nach der eine Datei, die nicht auf dem Server vorhanden ist, vom anderen (beo dort vorhandener, identischer Ordnerstruktur) geladen wird. Wird also
http://www.dummesbeispiel.de/ordner/unterordner/datei.html
angefordert, ist auf dem Server aber nicht vorhanden, so soll
http://www.andererserver.de/ordner/unterordner/datei.html
ausgeliefert werden (oder Fehlerdokument, wenn auch dort nicht vorhanden). Gleiches soll auch für Bilder oder andere Dateitypen gelten.
Bei der Suche nach einer Lösung bin ich natürlich auf die Möglichkeit der Verwendung einer .htaccess-Datei gestoßen. Aber leider konnte ich kein Beispiel finden, dass zur beschriebenen Problemstellung passt und habe mir auch keine Lösung zusammenreimen können.
Für Tipps wäre ich dankbar!
Viele Grüße,
Norbert
Hallo,
Bei der Suche nach einer Lösung bin ich natürlich auf die Möglichkeit der Verwendung einer .htaccess-Datei gestoßen. Aber leider konnte ich kein Beispiel finden, dass zur beschriebenen Problemstellung passt und habe mir auch keine Lösung zusammenreimen können.
Für Tipps wäre ich dankbar!
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Viele Grüße,
Norbert
Gruß
jobo
Hallo,
Hallo,
Bei der Suche nach einer Lösung bin ich natürlich auf die Möglichkeit der Verwendung einer .htaccess-Datei gestoßen. Aber leider konnte ich kein Beispiel finden, dass zur beschriebenen Problemstellung passt und habe mir auch keine Lösung zusammenreimen können.
Für Tipps wäre ich dankbar!
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
-s und -l wohl nicht, eher -f und -d (für file und directory).
Gruß
jobo
Wobei das zur folge hat, dass man ggf. zuerst umgeleitet wird und dann erst eine 404-Meldung erhält.
Schlauer wäre es imho serverseitig den neuen Server zu befragen, ob die Ressource existiert und dann erst umzuleiten.
Also Requests die kein File der Directory sind auf dieses Auswertungsscript umzuleiten - das könnte dann aber auch ohne Umleitung die Ressource vom anderen Server holen und anzeigen.
Vorteil: der Benutzer merkt garnicht, dass das zeug auf einem anderen Server liegt.
Hallo,
Schlauer wäre es imho serverseitig den neuen Server zu befragen, ob die Ressource existiert und dann erst umzuleiten.
per file_exists() und include() oder fget()?
Gruß
jobo
Hello,
Schlauer wäre es imho serverseitig den neuen Server zu befragen, ob die Ressource existiert und dann erst umzuleiten.
per file_exists() und include() oder fget()?
Eher mit wget. Das schreibt zuverlässig alle URIs um, wenn man es ihm sagt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Hello,
Schlauer wäre es imho serverseitig den neuen Server zu befragen, ob die Ressource existiert und dann erst umzuleiten.
per file_exists() und include() oder fget()?
Eher mit wget. Das schreibt zuverlässig alle URIs um, wenn man es ihm sagt.
Aber wget gibts ja für PHP wohl nicht, oder? Und exec() funktioniert doch in der Regel nicht, wegen Sicherheitseinstellungen?
Gruß
jobo
Hello,
Schlauer wäre es imho serverseitig den neuen Server zu befragen, ob die Ressource existiert und dann erst umzuleiten.
per file_exists() und include() oder fget()?
Eher mit wget. Das schreibt zuverlässig alle URIs um, wenn man es ihm sagt.
Aber wget gibts ja für PHP wohl nicht, oder? Und exec() funktioniert doch in der Regel nicht, wegen Sicherheitseinstellungen?
Wieso willst Du PHP bemühen? Es geht doch um die Konfiguration der Rewrite-Engine, oder?
Oder hab ich jetzt was verkehrt verstanden?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Eher mit wget. Das schreibt zuverlässig alle URIs um, wenn man es ihm sagt.
Aber wget gibts ja für PHP wohl nicht, oder? Und exec() funktioniert doch in der Regel nicht, wegen Sicherheitseinstellungen?
Wieso willst Du PHP bemühen? Es geht doch um die Konfiguration der Rewrite-Engine, oder?
jetzt hast du mich neugierig gemacht. Wie stellst du es an, aus der Server-Konfigurationsdatei heraus mit einer Rewrite Rule wget aufzurufen und einzubinden? Ein separates Programm?
Oder hab ich jetzt was verkehrt verstanden?
Ich bin mir nicht ganz sicher ...
Ciao,
Martin
Hello,
Also Requests die kein File der Directory sind auf dieses Auswertungsscript umzuleiten - das könnte dann aber auch ohne Umleitung die Ressource vom anderen Server holen und anzeigen.
Das ist aber kein kleiner Akt, die enthaltenen URis alle umzuschreiben.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Also Requests die kein File der Directory sind auf dieses Auswertungsscript umzuleiten - das könnte dann aber auch ohne Umleitung die Ressource vom anderen Server holen und anzeigen.
Das ist aber kein kleiner Akt, die enthaltenen URis alle umzuschreiben.
Wieso?
Das genau mit demselben Schnipsel den jobo gepostet hat. Anstatt auf example.com schreibt man es halt auf "meinlustigesautwertungsscript.php" um - aber halt ohne 301
Moinsen!
Danke für den Tipp! Es hat nicht funktioniert, mir aber eine Anregung für eine Suche im Web gegeben. Und dabei bin ich dann auf die Lösung
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) http://www.example.com/$1
gekommen. Der entscheidende Unterschied ist wohl das Ausrufezeichen, um die Nichtexistenz einer Datei als Bedingung festzulegen.
Viele Grüße,
Norbert
Hallo,
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) http://www.example.com/$1
gekommen. Der entscheidende Unterschied ist wohl das Ausrufezeichen, um die Nichtexistenz einer Datei als Bedingung festzulegen.
Ja natürlich. !-f muss schon sein.
Gruß
jobo
Moin!
Bei der Suche nach einer Lösung bin ich natürlich auf die Möglichkeit der Verwendung einer .htaccess-Datei gestoßen. Aber leider konnte ich kein Beispiel finden, dass zur beschriebenen Problemstellung passt und habe mir auch keine Lösung zusammenreimen können.
Für Tipps wäre ich dankbar!
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Es ist sehr traurig, dass bei der Frage nach einer simplen Weiterleitung immer gleich das Monster mod_rewrite aus der Höhle geholt wird.
Ich gehe bei dem beschriebenen Szenario davon aus, dass man sehr bewußt manche Dateien extern hostet. Insofern kann man eine vollständige Liste aller externen Dateien erstellen, und genau für diese dann eine Weiterleitung konfigurieren:
Redirect /pfad/zur/fehlenden/datei.ext http://www.example.org/pfad/zur/existierenden/datei.ext
Natürlich ist das Mehraufwand. Aber wenn man das komplett dynamisch angepasst für ALLE nichtexistierenden Dateien macht, erzeugt man Weiterleitungen auch für alle gerechtfertigten 404-Errors. Und das sollte ja nicht sein.
Außerdem erzeugt man sich so eine Liste aller extern zu hostenden Dateien, die man bei mehr Platz auf dem eigentlichen Server wieder zurückholen sollte.
Alternativ kann man sonst ja auch direkt den gesamten Webspace auf den anderen, größeren Server packen. :)
- Sven Rautenberg
Hallo,
Moin!
Bei der Suche nach einer Lösung bin ich natürlich auf die Möglichkeit der Verwendung einer .htaccess-Datei gestoßen. Aber leider konnte ich kein Beispiel finden, dass zur beschriebenen Problemstellung passt und habe mir auch keine Lösung zusammenreimen können.
Für Tipps wäre ich dankbar!
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) http://www.example.com/$1 [R=301,L]Es ist sehr traurig, dass bei der Frage nach einer simplen Weiterleitung immer gleich das Monster mod_rewrite aus der Höhle geholt wird.
Bitte nicht traurig sein (;-). Ist doch nur eine Variante und wenn man es präziser fassen kann, wie du sagst, warum nicht bzw. ist es dann sicherlich vernünftiger so. Ich sehe es immer auch so, dass hier jeder
die Sachen in die Runde schmeißt, die ihm bisher untergekommen sind. Da dürfte ich ja garnicht antworten, wenn ich hier nur 100%-korrekte Antworten beisteueren müsste. Sind doch auch Denkansätze und ist doch auch eine Art Diskurs, wo dann genau wie hier die Fürs und Wieders angesprochen werden.
Zudem würde man das mod_rewrite doch auch in deinem Ansatz benutzen im Sinne von: Wenn die Datei nich vorhanden, rewrite nach extern_datei_checker.php und die erledigt dann den Rest, oder?
Gruß
jobo
Moin!
Zudem würde man das mod_rewrite doch auch in deinem Ansatz benutzen im Sinne von: Wenn die Datei nich vorhanden, rewrite nach extern_datei_checker.php und die erledigt dann den Rest, oder?
Nö, wäre nicht vorgesehen. Für jede ausgelagerte Datei schreibt man explizit eine Zeile Redirect in die .htaccess-Datei.
- Sven Rautenberg