Php 屏蔽一堆图像URL
我正在使用一个第三方API,它为我提供了一组图像。我需要在一个页面上显示大约20到30个图像,但我不希望任何窥探源代码的人知道我正在为这些特定图像使用第三方服务。我该如何屏蔽这些图片,使它们看起来像来自我的域名。我想知道如何使用PHP或Apache实现这一点 顺便问一下,这是一种糟糕的做法,还是下载图片并保存到云端会更好 谢谢 编辑:我接受了Gordon的建议,尝试了下面的方法,并将下面的代码放到了我的.htaccess中,但由于一些奇怪的原因,它不起作用Php 屏蔽一堆图像URL,php,apache,Php,Apache,我正在使用一个第三方API,它为我提供了一组图像。我需要在一个页面上显示大约20到30个图像,但我不希望任何窥探源代码的人知道我正在为这些特定图像使用第三方服务。我该如何屏蔽这些图片,使它们看起来像来自我的域名。我想知道如何使用PHP或Apache实现这一点 顺便问一下,这是一种糟糕的做法,还是下载图片并保存到云端会更好 谢谢 编辑:我接受了Gordon的建议,尝试了下面的方法,并将下面的代码放到了我的.htaccess中,但由于一些奇怪的原因,它不起作用 RewriteRule "^/?ima
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
如果有人能分享我做错了什么,我将不胜感激。您可以在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);
如果您使用的是Apache,那么您可以在不使用PHP的情况下通过使用mod_rewrite
或mod_proxy
来实现这一点
RewriteRule "^/?images(.*)" "http://imageserver.local/images$1" [P]
引用
RewriteRule
提供了[p]
标志,用于通过mod\u代理传递重写的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/"
当同一作用域中存在其他有效的重写规则时,您可能需要使用重写规则
,因为重写规则
通常会在代理过程
之前生效,因此可能会抢占您试图完成的任务
如果您使用的是NGINX,则可以使用位置
和代理通行证
指令:
location /some/path/ {
proxy_pass http://www.example.com/link/;
}
有关详细信息,请参阅
在我看来,这是比使用PHP代理脚本更好的选择,因为Web服务器将为您处理缓存。使用PHP脚本时,您需要自己处理此问题。谢谢好答案您知道这是否是不好的做法吗?我最担心的是被搜索引擎惩罚。主要的缺点是你需要添加缓存manually@LogicalNonsense我不确定搜索引擎。例如,您甚至可以使用.htaccess并将图像的名称替换为images/555.jpg
,并且.htaccess
会将它们处理为php脚本,也许SEThanks会更好地澄清这一点(:是的,我会谨慎行事,走.htaccess路线。你现在知道我该怎么做吗?谢谢戈登!我现在正在尝试这种方法。我会让你知道它是如何运作的。我很可能会接受这一点answer@LogicalNonsense请改为使用ProxyPass,并确保将协议添加到反向指令