Warum funktioniert es einwandfrei wenn ich 'ProxyPreserveHost Off' setze?
Stimmt, die gab es ja bei dir auch noch. Ist wohl auch mit der Grund, warum im Manual steht, dass man die nicht ändern sollte.
Hast denn jetzt mal geschaut wo/wie der Redirekt gemacht wird?
Theoretisch (normal) es es ja so:
Client --> Server -->
https://ext.example.de/foo/ Host:ext.example.de
Server --> Backend -->
http://int.example.de/foo/ Host: int.example.de
Backend --> Server --> Redirekt -->
http://int.example.de/bar/ Host: int.example.de
Server --> Client --> Redirekt -->
https://ext.example.de/bar/ Host: ext.example.de
Der Server weis, dass er das Backend mit int.example.de angesprochen hat, und bekommt vom Backend Header damit (int.example.de) zurück. Header die hier übereinstimmen ersetzt er durch den Hostnamen den der Client verwendet hat ( ext.example.de). Und behandelt das allgemein wie ein interner Redirekt, ändert also nur den Hostnamen (und Pfade falls nötig), ohne Ändern des Protokolles,
Bei dir ist es gerade so:
Client --> Server -->
https://ext.example.de/foo/ Host:ext.example.de
Server --> Backend -->
http://int.example.de/foo/ Host: ext.example.de
Backend --> Server --> Redirekt -->
http://ext.example.de/bar/ Host: ext.example.de
Server --> Client --> Redirekt -->
http://ext.example.de/bar/ Host: ext.example.de
Der Server spricht das Backend selbst mit int.example.de an, bekommt vom Backend aber Header mit ext.example.de zurück. Da diese nicht übereinstimmen, behandelt der Apache dies wie ein externer Redirekt und ändert gar nichts daran und reicht das as-is an den Client zurück. Da der komplette Redirekt Header aber auch das Protokoll enthält, wird das hier gewechselt (aus Sicht des Clients).
Bei "ProxyPreserveHost On" ist eben das Backend für die korrekte Validierung und Generierung der Respond-Header verantwortlich. (Steht ja auch so ähnlich im Manual.)