代码之家  ›  专栏  ›  技术社区  ›  Logical Nonsense

屏蔽一堆图像url

  •  2
  • Logical Nonsense  · 技术社区  · 7 年前

    我正在使用第三方api,它为我提供了一堆图像。我需要在一个页面上显示大约20到30个图像,但我不想让任何窥探源代码的人知道我正在为这些特定的图像使用第三方服务。我该如何掩盖这些图片,使它们看起来像是来自我的域名。我希望知道如何使用php或apache来实现这一点。

    P.S.这是个坏习惯,还是我最好下载图片并保存到云端?

    谢谢

    编辑:我接受了Gordon的建议,尝试了以下操作,并将以下代码放入了我的.htaccess中,但由于某种奇怪的原因,它无法工作。

    RewriteRule "^/?images(.*)" "https://img-inventory.supplier-domain.com/image/$1" [P]
    ProxyPassReverse "/images/" "img-inventory.supplier-domain.com/image/"
    

    以下是供应商url的示例 https://img-inventory.supplier-domain.com/image/upload/f_auto,q_auto:best,t_inv_small/hotel/i/155110/wpmeb5pjxdgse8kvfd87f.jpg

    如果有人能和我分享我做错了什么,我将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Gordon Haim Evgi    7 年前

    如果您使用的是apache,那么您可以使用 mod_rewrite mod_proxy .

    引用自 http://httpd.apache.org/docs/2.4/rewrite/avoid.html#proxy

    RewriteRule 提供 [P] 要传递重写的uri的标志 MODY代理 是的。

    RewriteRule "^/?images(.*)" "http://imageserver.local/images$1" [P]
    

    但是,在许多情况下,当不需要实际的模式匹配时,如上面的示例所示, ProxyPass 指令是更好的选择。这里的示例可以表示为:

    ProxyPass "/images/" "http://imageserver.local/images/"
    

    请注意,无论您是否使用 重写规则 ProxyPass公司 ,您仍然需要使用 ProxyPassReverse 捕获从后端服务器发出的重定向的指令:

    ProxyPassReverse "/images/" "http://imageserver.local/images/"
    

    你可能需要使用 重写规则 当有其他的时候 RewriteRules 在同一范围内有效,作为 重写规则 通常在 ProxyPass公司 ,因此可能会抢先完成你要完成的任务。

    如果使用nginx,可以使用 location proxy_pass 指令:

    location /some/path/ {
        proxy_pass http://www.example.com/link/;
    }
    

    https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/ 详细情况。

    imo,这比使用php代理脚本更好,因为web服务器将为您处理缓存。使用php脚本,您需要自己处理这个问题。

        2
  •  3
  •   MrSmile cashews    7 年前

    您可以在php文件中屏蔽它们:

    <img src="image.php?image_id=555" />
    

    像这样的image.php:

    <?php
    $url = YOUR_URL;
    $img_details = getimagesize($url);
    header("Content-type: {$img_details['mime']}");
    readfile($url);
    

    这取决于您在哪里存储图像的url。但如果url没有图像,则需要防止出现错误。

    显然,更好的做法是从自己的存储中下载图像和显示。

    推荐文章