5

我需要绕过跨站点脚本限制,以便在用户单击我在 iframe (external.com/onlyforme) 中加载的外部站点的链接时向他们显示地图。我了解到,最简单的方法是设置反向代理,以便 Apache 在我访问 local.com/external 时检索 external.com/onlyforme,并使其看起来像是来自我的域。

这主要是有效的,但是当 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。

4

2 回答 2

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

于 2012-11-14T18:56:05.550 回答
0

arober11的回答极大地帮助解决了我的类似问题。我试图将其缩小到可能的最短规则集,并且我自己的配置是在https://my-domain-name.wtf/pad上运行Etherpad

<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]
于 2014-10-10T00:19:18.573 回答