Wie leite ich Anfragen an eine andere URL weiter, ohne die URL in Apache tatsächlich zu ändern?

5602
Kim L

Ich habe zum Beispiel Apache, der in einer Domäne läuft http://example.com. Ich habe auch Tomcat auf meinem Server und habe alle Anfragen http://example.com/t/an Tomcat weitergeleitet und alle anderen URLs werden direkt von Apache bereitgestellt .

Mein Problem ist, dass ich eine URL mag http://example.com/bar, aber eigentlich sollte es auf zeigen http://example.com/t/bar.

Mit anderen Worten, die URL sollte von Tomcat verarbeitet werden, wodurch der Anwendungskontext "Leiste" angezeigt wird.

Das Problem ist, ich bin nicht ganz sicher, wie ich die richtige Umschreibungsregel dafür festlegen kann. Ich habe versucht, dies zu sites-available / default hinzuzufügen

RewriteEngine einschalten RewriteRule ^ / bar (. *) / T / bar $ 1 [R] 

Dadurch wird die URL jedoch nicht beibehalten, sondern es wird lediglich mit dem /t/Präfix an die Tomcat-URL weitergeleitet . Wenn ich das entferne [R], dann bekomme ich nur eine 404.

Was ist das richtige RewriteRule, um mein Problem zu lösen?

0
Auf serverfault.com erhalten Sie wahrscheinlich bessere Antworten MDMarra vor 15 Jahren 1
Ich verstehe die Frage nicht. Sie sagen "aber es sollte eigentlich auf http://example.com/t/bar verweisen" und dann sagen Sie "Aber das behält die URL nicht bei und leitet stattdessen einfach mit dem Präfix / t / auf die Tomcat-URL um. " Möchten Sie die URL ändern oder nicht? innaM vor 15 Jahren 0
Manni, entschuldige die Verwirrung. Nein, ich möchte nicht, dass sich die URL ändert. Kim L vor 15 Jahren 0

1 Antwort auf die Frage

3
Doug Harris

Sie sollten die Option 'P' (Proxy) für die Regel mod_rewrite verwenden, um sie intern auf dem Server auszuführen. Sie müssen auch mod_proxy aktivieren .

aus den mod_rewrite-Dokumenten :

'Proxy | P' (Vollmacht)

Dieses Flag erzwingt, dass der Substitutionsteil intern als Proxy-Anfrage gesendet wird und sofort (die Verarbeitung beim erneuten Schreiben hier beendet wird) durch das Proxy-Modul geleitet wird. Sie müssen sicherstellen, dass die Ersetzungszeichenfolge eine gültige URI ist (normalerweise beginnend mit http: // hostname ), die vom Apache-Proxy-Modul verarbeitet werden kann. Wenn nicht, erhalten Sie eine Fehlermeldung vom Proxy-Modul. Verwenden Sie dieses Flag, um eine leistungsfähigere Implementierung der ProxyPass-Direktive zu erreichen, um Remote-Inhalte im Namespace des lokalen Servers abzubilden.

Hinweis: mod_proxy muss aktiviert sein, um dieses Flag verwenden zu können.