2012-11-04 5 views
5

Ich muss Cross-Site-Scripting-Einschränkungen umgehen, um Benutzern eine Karte anzuzeigen, wenn sie auf einen Link von einer externen Site klicken, die ich in einem Iframe (external.com/onlyforme) geladen habe. Ich habe gelernt, dass der einfachste Weg dies zu tun ist, einen Reverse-Proxy einzurichten, so dass Apache external.com/onlyforme abrufen würde, wenn ich auf local.com/external zugreife und es so einrichten würde, dass es aus meiner Domain zu kommen scheint.Apache Reverse Proxy: Wie umzuleiten relative URLs in externen Site zu sich selbst?

Das funktioniert meistens, aber wenn external.com/onlyforme/index.html versucht, auf external.com/onlyforme/site_media/script.js zuzugreifen, wird dies zu local.com/site_media/script.js weitergeleitet, was ist nicht was ich will. Stattdessen möchte ich, dass dies auf die richtige URL in external.com/onlyforme umgeleitet wird, so dass die externe Site wie erwartet funktioniert.

Wie kann ich das tun?

Ich habe dies in meinem httpd.conf, außerhalb anderen Konfigurationsanweisungen:

ProxyRequests Off 
ProxyPass /external/ http://www.external.com/onlyforme 
ProxyPassReverse /external/ http://www.external.com/onlyforme 

ich laufe Apache 2.2.

Antwort

2

Sie müssen ein paar ProxyHTMLURLMap Direktiven zu dem oben genannten hinzufügen, um hart codierte URLs in der zurückgegebenen HTML zu prüfen und neu zu schreiben, z.

ProxyRequests Off 
ProxyPass  /external/   http://www.external.com/onlyforme 
ProxyHTMLURLMap http://www.external.com/onlyforme  /external 

<Location /external/> 
    ProxyPassReverse http://www.external.com/onlyforme 
    SetOutputFilter proxy-html 
    ProxyHTMLURLMap/   /external/ 
    ProxyHTMLURLMap /site_media /external/site_media/ 
</Location> 

Siehe auch: http://wiki.uniformserver.com/index.php/Reverse_Proxy_Server:_mod_proxy_html

0

arober11 ‚s Antwort sehr geholfen mein ähnliches Problem zu lösen. Ich habe versucht, es zu verengen, um den kürzesten Satz von Regeln möglich, und es ist meine eigene Konfiguration ein Etherpad läuft bei https://my-domain-name.wtf/pad haben:

<Location /pad> 
    ProxyPass http://localhost:9001 retry=0 
    # retry=0 => avoid 503's when restarting etherpad-lite 
    ProxyPassReverse http://localhost:9001 
    SetOutputFilter proxy-html 
    ProxyHTMLURLMap http://localhost:9001 
</Location> 
RewriteRule ^/pad$ /pad/ [R]