我使用 Java 和 Apache,并在安全页面上托管不安全的第三方内容,当我在 Facebook 上分享我的页面时,Facebook 选项卡不会显示不安全的内容。我偶然发现了一篇描述此行为的文章,并希望纠正此问题。https://www.tabsite.com/blog/chrome-and-other-browsers-not-showing-insecure-content/
由于我的内容提供商没有提供安全内容,我的想法是使用 apache 将我的安全 URL 代理到第三方非安全 URL。
我该如何使我的代理动态化,这样我就不必不断修改我的服务器映像了?我最初的想法是在第三方 URL 前面加上我的域名
https://images.example.com?url=http://content-provider.com/image/1234.jpg
并使用 apache rewrite 或其他东西对其进行解析,但我不确定这是否是一个合适的解决方案。我正在寻找一些想法和建议。
如何使用 mod_rewrite 将 url 重写为查询参数?
我尝试编写以下代码,但没有成功
https://images.example.com?url=http://content-provider.com/image/1234.jpg
RewriteCond %{QUERY_STRING} ^url=(.*)$ [NC]
RewriteRule (.*)$ %1 [NC,L,R=301]
我希望http://content-provider.com/image/1234.jpg
答案1
用完全通用的方式做这件事会很困难。在您的示例中,您可以将“R=301”标志更改为“P”(代表代理),它应该可以工作(如果不行,请使用 rewritelog 进行调试)。
否则,您必须有“某种方式”将请求 URI 映射到后端服务器,可能 rewritemap 可以在这里提供帮助,但这取决于您对底层代理文件的真实位置的了解程度。
一个可能的(但非常简单的)解决方案是,您可以拆分服务器并为其分配一封信件。
ProxyPass /a/ http://content-provider-a.example.com/ ProxyPass /b/ http://content-provider-b.example.com/ ...
然后是通用 URI 路径 /a/path/to/file/on/provider-a/ 等等。但同样,您必须提前知道所有位置。
如果您进一步解释一下,那么可能会有更多的建议。
讨论后补充信息。首先,这里有一些关于 mod_rewrite 的好信息:在 Apache 中重定向、更改 URL 或将 HTTP 重定向到 HTTPS - 您想了解但又不敢问的有关 Mod_Rewrite 规则的一切
您还应该花时间学习 PCRE。
使用以下作为我们的基本配置,这里有一些解释:
RewriteMap myquery “fastdbd:SELECT externalURL FROM photo WHERE id = %s” 重写规则 ^/images/(.*) ${myquery:$1} [P,L]
$1 是 RewriteRule 中匹配的字符串的反向引用,即括号内的 .*。%s 是传递给 RewriteMap 的参数,在本例中与 $1 相同。
需要注意的是,Mod_rewrite 并不适合胆小的人。它非常复杂,你应该花一些时间来研究它。