# Loadbalancer und Apache RedirectMatch



## schnuffie (30. November 2010)

Hallo Experten,

im Apache soll bei einem bestimmten Pattern auf einen anderen Server umgeleitet werden. Dazu habe ich folgende Eintrag in die httpd.conf gemacht:

```
RedirectMatch ^/alt$ http://www.neu.de/neu
```

Ziel ist es, alles was mit "alt" kommt, auf den neuen URL umzuleiten.

Auswirkung ist nun, daß jeder RedirectMatch zwar korrekt umleitet, jedoch dem Aufrufer den Status liefert. Bei dem Beispiel ist das "HTTP/1.1 302 Found", d.h. ohne Angabe wird als der Default-Wert 302 geliefert. Würde man nach "RedirectMatch" eine 301 zwischenschieben, würde an den Aufrufer "HTTP/1.1 301 Moved Permanently" geliefert.

Da der "Aufrufer" in unserem Fall ein Standard-Loadbalancer (Round-Robin) ist, bekommen wir so ein Problem. Dieser Loadbalancer liegt nicht in unserem Einflußgebiet. Er erwartet immer "HTTP/1.1 200 OK". Bei allen neuen Aufrufen klappt das. Wenn allerdings der RedirectMatch zuschlägt, sperrt der Loadbalancer den Response. 

Wie kann ich für die alten Seiten eine Weiterleitung im Apache hinbekommen, daß auch der Loadbalancer "zufrieden" ist und sein "HTTP/1.1 200 OK" trotz Weiterleitung bekommt?


----------



## port29 (30. November 2010)

Sorry, aber hier scheint es ein grundlegendes Verständnis-Problem zu geben.

200 OK bedeuten für den Browser, dass alles OK ist und er die Inhalte anzeigen kann. 
302 ist eine temporäre Weiterleitung, wo die Weiterleitungs-URL auch mit angegeben wird. 

=> es gibt keine Weiterleitung mit Status 200
Das einzige, was du machen könntest, ist eine JS Weiterleitung


----------



## schnuffie (4. Dezember 2010)

Genau das ist das Problem. Ich suche sowas wie ein Forward (gibt? z.B. bei JSPs), bei dem kein neuer Request angefangen wird, sondern der gleiche Request weiterverwendet wird - mit Status 200.


----------



## port29 (5. Dezember 2010)

Also im Grunde hast du nur zwei Möglichkeiten:
Entweder setzt du auf mod_rewrite, dafür muss der Request allerdings auf einem Server bleiben, damit es funktioniert.... Ich merke grade, dass man hier eigentlich auch mod_proxy verwenden könnte. Damit wäre es möglich, den Request an einen anderen Server weiterzuleiten, der Request würde aber komplett über angefragten Server gehen.

Oder die Zweite möglichkeit:
Wenn der Redirect anschlagen sollte, leitest du per Rewrite den Benutzer auf eine Seite um, die per JS weiterleitet. Damit hättest du deine Status 200 Antwort und die anschließende Weiterleitung auf einen anderen Server.


----------



## schnuffie (7. Dezember 2010)

Hallo port29,

die erste Lösung verursacht doch mein Problem, oder?
Das Zweite würde ich gern tun, doch leider kommunizieren Server die Daten per http, also kann ich leider keine Seite mit Java-Script "untermogeln".


----------



## port29 (8. Dezember 2010)

schnuffie hat gesagt.:


> die erste Lösung verursacht doch mein Problem, oder?



Nee... Bei der ersten Lösung hast du eine (mehr oder weniger) transparente Weiterleitung. Dein Server surft dann auf dem anderen Server



schnuffie hat gesagt.:


> Das Zweite würde ich gern tun, doch leider kommunizieren Server die Daten per http, also kann ich leider keine Seite mit Java-Script "untermogeln".


 
Sorry aber das verstehe ich nicht. Statt eines Redirects nutzt du mod_rewrite und leitest die User auf die Javascript-Website um. Und per JS leitest du dann auf den zweiten Server um. Also ich sehe da keinerlei Probleme.


----------



## schnuffie (10. Dezember 2010)

Hallo port 29,

bei normalen Webseiten ist das kein Problem. In unserem Fall handelt es sich um eine Schnittstelle zwischen zwei Anwendungen, die über http miteinander kommunizieren. Javascript funktioniert da leider nicht. Im Detail werden über http XMLs ausgetauscht.


----------

