我正在使用第三方API,该API为我提供了一堆图像。我需要在单个页面上显示大约20到30张图像,但是我不想让任何窥探来源的人知道我正在使用第三方服务来处理这些特定图像。我将如何屏蔽这些图像,以使它们看起来像来自我的域名。我最好希望知道如何使用PHP或Apache进行此操作。
PS是一种不好的做法,还是我最好下载图像并将其保存到云中?
谢谢
编辑:我接受了Gordons的建议,并尝试了以下操作并将以下代码放入.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
如果任何人都可以分享我在做错的事情,我将不胜感激。
答案 0 :(得分:3)
您可以在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没有图像,则需要防止错误。
显然,更好的做法是下载图像并从自己的存储中显示。
答案 1 :(得分:2)
如果您使用的是Apache,则可以通过使用mod_rewrite
或mod_proxy
来实现,而无需使用PHP。
引用http://httpd.apache.org/docs/2.4/rewrite/avoid.html#proxy
RewriteRule
提供了[P]
标志,以通过mod_proxy
传递重写的URI。RewriteRule "^/?images(.*)" "http://imageserver.local/images$1" [P]
但是,在许多情况下,如上面的示例所示,当不需要实际的模式匹配时,
ProxyPass
伪指令是更好的选择。此处的示例可以表示为:ProxyPass "/images/" "http://imageserver.local/images/"
请注意,无论您使用
RewriteRule
还是ProxyPass
,仍然需要使用ProxyPassReverse
指令来捕获从后端服务器发出的重定向:ProxyPassReverse "/images/" "http://imageserver.local/images/"
当在同一范围内还有其他
RewriteRule
有效时,您可能需要使用RewriteRules
来代替,因为RewriteRule
通常在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脚本,您需要自己处理。