我正在使用 httpdmod_proxy
设置 CORS 代理,类似于事物代理或者crossorigin.me我已经
SSLProxyEngine on
<LocationMatch "^/corsproxy/(https?)://([^/]+)/(.*)$">
ProxyPassMatch "$1://$2/$3"
Header set Access-Control-Allow-Origin "https://my-site.org/"
Header unset X-Frame-Options
</LocationMatch>
这是可行的,因为您可以访问http://myhost/corsproxy/http://example.com/somepage
并且它成功加载。问题是,重定向仍然直接指向example.com
,而不是等效的代理 URL。
这就是它的作用ProxyPassMatch
所在,但我不相信它能够对目标 URL 进行正则表达式匹配,所以我无法像在 中那样提取协议、主机名和路径LocationMatch
。有解决方法吗?也许我可以用 做些什么mod_rewrite
?
在评论出现之前:是的,我知道安全后果,是的,我想尝试完全在 httpd 内部执行此操作,而不是运行我在问题开头链接到的工具,因为它们引入了外部依赖项(在两种情况下都是 NodeJS)。
答案1
我不确定ProxyPassReverse
通常会做什么,但只是为了重定向,我能够使用Header edit
指令:
Header edit Location ^http://(.+)$ "/corsproxy/http://$1"
Header edit Location ^https://(.+)$ "/corsproxy/https://$1"
我尝试使用单行而不是两行,但遇到了一些奇怪的行为,不值得追踪。我仍然想知道是否还有其他我可能无法用这种方法覆盖的极端情况。