Apache Rewrite / Proxy

Roin

Freier Denker
Registriert
22 Juli 2013
Beiträge
581
Hallo zusammen,

ich habe einen Webserver auf dem ein Apache läuft.
Auf diesem habe ich eine Domain subdomain.example.com

Ich habe mehrere Projekte, die konkreten Bezug zu der subdomain.example.com haben und möchte nun diese Projekte unter
subdomain.example.com/projectA/ und subdomain.example.com/projectB/ verfügbar machen.

Nun habe ich das Problem, dass die meisten Links in den Projekten mit einem führenden Slash (/) beginnen und somit auf "root" bezogen sind. Teilweise habe ich darauf Einfluss, teilweise nicht, aufgrund verwendeter Frameworks und so weiter.

Kann mir jemand von euch sagen, wie ich das umzusetzen habe, dass ein Link (/unterseiteA) nicht auf subdomain.example.com/unterseiteA sondern auf subdomain.example.com/projectA/unterseiteA verweißt? Die entsprechenden Links sollen sozusagen als neuen "root" das Verzeichnis project*/ annehmen.

In meiner Config habe ich bereits Zeilen wie:
[src]ProxyPass /projectA http://127.0.0.1:5000
ProxyPassReverse /projectA http://127.0.0.1:5000[/src]
stehen.
Ich habe auch eine .htaccess-Datei angelegt mit Inhalten wie:
[src]RewriteEngine On
RewriteRule ^(.*) http://0.0.0.0:5001/$1 [L,NC][/src]

Wirklich klappen tut das aber nicht. Die "Hauptseite" wird entsprechend korrekt gelinkt, Skripte, die geladen werden oder dergleichen beziehen sich damit aber immer auf den falschen Root.

Über Hilfe wäre ich echt dankbar.
 
Nur mit mod_rewrite kommst du hier nicht weiter, weil mod_rewrite nur die Request-URLs sieht, die der Browser an den Server schickt - du möchtest aber die URLs in den Webseiten ändern die der Server zurückgibt.

Gehen würde das mit mod_substitute:
Das letzte Beispiel beschreibt genau deinen Fall. Beachte aber dass du die RegExp anpassen musst, wenn du relative und nicht-relative URLs umschreiben möchtest.

Allerdings ist es ein ziemlicher Hack - wenn du die Links direkt fixen kannst, wäre das deutlich sauberer. Die meisten Frameworks und Webapps haben Optionen, um die erzeugten URLs zu konfigurieren.
 
  • Thread Starter Thread Starter
  • #3
Danke für die Antwort.
Ich habe auch bereits an mod_substitute gedacht. Das muss ich dann wohl noch etwas ausprobieren.

Gibt es noch weitere Lösungsansätze, abgesehen die URLs in den Webapps selbst anzupassen?
 
Je nach URLs kommst du eventuell auch mit einem HTML-<base> weiter. Aber wenn deine URLs explizit auf absolute Pfade zeigen (/foo/bar) oder sogar absolut sind ( ), dann hilft das auch nicht.

Das Problem mit mod_substutute ist halt, dass man damit irgendwas im HTML rumpatcht, aber dabei gerne was uebersieht und anderswo eventuell zu viel ersetzt.
Es gibt einfach zu viele Wege wie URLs in Webseiten eingebettet sein koennen um das wirklich verlaesslich zu machen - Links, Bilder, style- und script-src, in JavaScript fuer fetch/Ajax, usw.
 
Zurück
Oben