realbutsch: Apache: Unterschied RewriteRule zu ProxyPass

Hallo Zusammen,
ich habe paar Fragen zum URL-Rewriting auf dem Apache.
Zum Background_

  • Ich nutzte XAmpp auf dem Wirkserver mit Apache 2 / Win 2008 Server
  • Wir verweisen in unserer Anwendung auf andere Server von uns (werden auch anderswo betrieben), über die Links erfolgt auch ein Autologin auf den anderen Server.
  • Das Loginskript sollte möglichst für den User gekapselt werden, also statt
    www.portal-z.de/login.php... -> www.portal-x.de (ohne login.php)

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

  1. 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

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
  2. Hi!

    1. 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.

    1. 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!