我正在使用 java 和 apache,并且在我的安全页面上托管非安全的第 3 方内容,当我在 facebook 上共享我的页面时,facebooks 选项卡不会显示不安全的内容。我遇到了一篇描述这种行为的文章,我正在寻求纠正这个问题。https://www.tabsite.com/blog/chrome-and-other-browsers-not-showing-insecure-content/
由于我的内容提供商不提供安全内容,我的想法是使用 apache 将我的安全 URL 代理到第三方非安全 URL。
我将如何使我的代理动态化,这样我就不必不断地修改我的服务器映像?我最初的想法是在我的域前面加上第 3 方 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
以一种完全通用的方式来做这件事是很困难的。在您的示例中,您可以将“R=301”标志更改为“P”(用于代理),它应该可以工作(如果没有,请使用 rewritelog 进行调试)。
否则,您必须有“某种方式”将请求 URI 映射到后端服务器,可能 rewritemap 在这里会有所帮助,但这取决于您对底层代理文件的实际位置了解多少。
一种可能(但非常简单)的解决方案是,您可以拆分服务器并为其分配一个字母。
然后是一般的 URI 路径 /a/path/to/file/on/provider-a/ 等。但同样你必须提前知道所有位置。
如果你解释得更多,那么可能会有更多的建议。
讨论后补充信息。首先,这里有一些关于 mod_rewrite 的好信息:Redirect, Change URLs or Redirect HTTP to HTTPS in Apache - 你曾经想知道的关于 Mod_Rewrite 规则但不敢问的一切
您还应该花时间学习 PCRE。
使用以下作为我们的基本配置,这里有一些解释:
$1 是对 RewriteRule 中匹配的字符串的反向引用,即括号内的 .*。%s 是传递给 RewriteMap 的参数,在这种情况下与 $1 相同。
注意事项。Mod_rewrite 不适合胆小的人。它非常复杂,您应该期望花一些时间来解决这个问题。