Apache: Unterschied RewriteRule zu ProxyPass
realbutsch
- webserver
Hallo Zusammen,
ich habe paar Fragen zum URL-Rewriting auf dem Apache.
Zum Background_
1. Unterschied RewriteRule zu ProxyPass
Ich bekomme teilweise mit beiden Techniken ein Rewrite hin, verstehe aber nicht genau wo der Unterschied liegt (suche schon seit Stunden):
Weg 1: ProxyPass
In httpd.conf (alle Rewrite-Module) aktiviert und auf eine weitere Datei verwiesen:
Include "conf/extra/httpd-proxy.conf"
In „httpd-proxy.conf“ folgendes eingetragen:
ProxyPass /app1/ http://server-blah/superwiki/doku.php
Aufruf klappt: http://server-blah//app1/
Die Anweisung ProxyPass klingt aber erst mal nicht nach URL-Rewriting.
Weg 2:
Die meisten beschreiben diesen Weg:
httpd.conf
RewriteEngine on
RewriteRule ^(.*).htm$ $1.php
RewriteRule /test/ http://www.portal-x.de/
Diese Rewrite-Rules kann ich ja auch in .htaccess auslagern, da ich aber vollen Server-Zugriff habe, reicht die Anpassung in der httpd.conf
Frage: Wo ist genau der Unterschied dieser beiden Techniken?
Vor/Nachteile ?
2. RewrileRule bewirkt redirect
Beim Testen fällt mir auf, dass beispielsweise der folgende Eintrag:
RewriteRule /test/ http://www.portal-x.de/
in der URL direkt die umgelenkte Seite angezeigt wird, also http://www.portal-x.de/ statt
http://127.0.0.1/test/
Lässt es sich konfigurieren, dass tatsächlich nur die Alias-Seite angezeigt wird ?
Danke schon mal,
Grüße
Frage: Wo ist genau der Unterschied dieser beiden Techniken?
Vor/Nachteile ?
Er liegt darin dass dein Rewrite Code identisch ist mit
RewriteEngine on
RewriteRule ^(.*).htm$ $1.php
RewriteRule /test/ http://www.portal-x.de/ [R]
Mit anderen Worten, es ist für den Client ein sichtbarer Redirect
Hat also nichts mit Proxy zu tun.
Wenn du die Proxy Funkiton willst, wie hier dokumentiert
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
RewriteEngine on
RewriteRule ^(.*).htm$ $1.php
RewriteRule /test/ http://www.portal-x.de/ [P]
Der Switch reagiert nur bei aktiviertem mod_proxy
mfg Beat
Hi!
- Unterschied RewriteRule zu ProxyPass
Versuchst du zu raten oder hast du nachgelesen, wofür die beiden Direktiven vorgesehen sind?
Ich bekomme teilweise mit beiden Techniken ein Rewrite hin, verstehe aber nicht genau wo der Unterschied liegt (suche schon seit Stunden):
mod_rewrite nimmt man üblicherweise, um statt der angeforderten Ressource etwas anderes auszuliefern oder auch, um den Request auf eine bestimmte Ressource zu leiten. Es ist auch möglich, auf externe Ressourcen zu verweisen, dann ist das Ergebnis aber ein Location-Header (ein Redirect) an den Client und dieser fordert dann in einem neuen Request die Ressource an.
Weg 1: ProxyPass
In httpd.conf (alle Rewrite-Module) aktiviert und auf eine weitere Datei verwiesen:
Include "conf/extra/httpd-proxy.conf"
Schau in die Apache-Dokumentation, da gibt es eine Auflistung aller Direktiven. Wenn du die Dokumentation zu ProxyPass gefunden hast, scroll nach oben und dann siehst du ... mod_proxy - also nix mit mod_rewrite.
Und was ist ein Proxy? Ein Stellvertreter. Er führt für dich den Request aus. Du leitest damit also alls Requests durch deinen Webserver.
Frage: Wo ist genau der Unterschied dieser beiden Techniken?
Vor/Nachteile ?
Ich beschreibe nur Eigenschaften. Ob es vor- oder nachteilig ist, kann man nur bewerten, wenn man die Aufgabenstellung genau kennt und inwieweit bestimmte Eigenschaften sich als problematisch herausstellen oder auch nicht.
Ein Location-Header ist einige Bytes lang. Der nächste Request geht nicht mehr über deinen Apachen. Beim Proxy geht aller Verkehr durch selbigen. Da er derjenige ist, der die Requests stellt, kommen diese beim Ziel immer von der selben Quelle und nicht von vielen verschiedenen Clients, die nach einem Redirect selbst das Ziel befragen.
- RewrileRule bewirkt redirect
Siehste, da hast du ja doch schon einen Unterschied festgestellt.
Beim Testen fällt mir auf, dass [...] in der URL direkt die umgelenkte Seite angezeigt wird, [...]
Lässt es sich konfigurieren, dass tatsächlich nur die Alias-Seite angezeigt wird ?
Ja, wenn du den Request ausführst und dem Client nur das Ergebnis durchreichst.
Du kannst auch anhand der HTTP-Header im Browser sehen, was aus seiner Sicht pssiert. Dazu kannst du jene Tools verwenden.
Lo!