我需要绕过跨站点脚本限制,以便在用户点击我在iframe(external.com/onlyforme)中加载的外部站点的链接时向用户显示地图。我了解到,最简单的方法是设置反向代理,以便Apache在访问local.com/external时检索external.com/onlyforme,并使其显示为来自我的域。< / p>
这主要有效,但是当external.com/onlyforme/index.html尝试访问external.com/onlyforme/site_media/script.js时,会被重定向到local.com/site_media/script.js,这不是我想要的是。相反,我希望将其重定向到external.com/onlyforme中的正确URL,以便外部站点按预期工作。
我该怎么做?
我在httpd.conf中有这个,在任何其他配置语句之外:
ProxyRequests Off
ProxyPass /external/ http://www.external.com/onlyforme
ProxyPassReverse /external/ http://www.external.com/onlyforme
我正在运行Apache 2.2。
答案 0 :(得分:2)
您需要在上面添加几个ProxyHTMLURLMap指令,以检查并重写返回的HTML中的任何硬编码URL,例如
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>
另请参阅:http://wiki.uniformserver.com/index.php/Reverse_Proxy_Server:_mod_proxy_html
答案 1 :(得分:0)
arober11的回答极大地帮助解决了我的类似问题。我试图将其缩小到可能的最短规则,并且我有自己的配置,Etherpad运行https://my-domain-name.wtf/pad:
<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]