Php 其他网站可以';当我使用重定向时,请不要从我的站点上载图像

Php 其他网站可以';当我使用重定向时,请不要从我的站点上载图像,php,image,redirect,upload,http-headers,Php,Image,Redirect,Upload,Http Headers,我有一个网站,上面有这样的URL图像: http://mysite.com/image1.jpg header('Location: http://images.mysite.com/image1.jpg'); 我的服务器使用php重定向到包含实际文件的子域,如下所示: http://mysite.com/image1.jpg header('Location: http://images.mysite.com/image1.jpg'); 这几乎适用于所有用途,例如在img标记中或在本地

我有一个网站,上面有这样的URL图像:

http://mysite.com/image1.jpg
header('Location: http://images.mysite.com/image1.jpg');
我的服务器使用php重定向到包含实际文件的子域,如下所示:

http://mysite.com/image1.jpg
header('Location: http://images.mysite.com/image1.jpg');
这几乎适用于所有用途,例如在img标记中或在本地保存文件时。出于这些目的,这两个URL本质上是等效的。但是,当我使用图像上传程序(如tumblr或imgur)访问一个站点,并尝试上传第一个url时,它失败了(表示“上传照片时出错”或“不支持图像格式,或图像已损坏”)

有没有办法让这一切顺利进行?我尝试发送不同的状态标题,但没有帮助

编辑:

正如建议的那样,我可以通过htaccess重定向或打开文件并发送内容来实现这一点。这可以很好地工作,但我不希望在用户将文件用于其他目的时发生这种情况,比如将其嵌入img标记中。这是因为我的images.mysite.com域是一个cdn,用于托管我的图像内容,如果我必须从我的web服务器保留内容,它将无法实现其目的。htaccess是不可行的,因为我想在请求第一个url时运行一些php脚本

如果我能通过文件上传器检测到它何时被使用,那么我可以单独处理其他情况。但我想我没法察觉,对吗

编辑2(解决方案):


好吧,我做了一个骇人的折衷:事实证明,上传请求通常在头中没有“accept_charset”参数,而嵌入请求则有。使用此功能,我可以检测何时需要上传图像,然后下载图像并发送内容。不是岩石固溶体,但效果足够好。谢谢大家

您无法执行此操作,因为图像上载服务需要实际的图像文件,它们不遵循任何重定向。

您无法执行此操作,因为图像上载服务需要实际的图像文件,它们不遵循任何重定向。

您不应该将标准结果代码(200-OK)与头重定向一起使用


看看。

您不应该在标题重定向中使用标准结果代码(200-OK)


请查看。

您的图像上载程序站点似乎没有遵循您所做的重定向。因此,为了使其正常工作,您应该打开远程文件并发送其内容,而不是进行重定向。

您的图像上载程序站点似乎没有遵循您所做的重定向。因此,为了使其正常工作,您应该打开远程文件并发送其内容,而不是重定向。正如其他海报所说,图像上传服务读取您的url返回的数据

http://mysite.com/image1.jpg
作为图像文件-这就是重定向混淆这些服务的原因


为什么不使用PHP脚本从外部源读取图像,然后打印出二进制数据,而不是重定向呢?您可以通过一个.htaccess文件来完成这项工作,该文件可以查找请求中带有“.jpg”的任何内容。

正如其他海报所说,图像上载服务读取您的url返回的数据

http://mysite.com/image1.jpg
作为图像文件-这就是重定向混淆这些服务的原因


为什么不使用PHP脚本从外部源读取图像,然后打印出二进制数据,而不是重定向呢?你可以通过一个.htaccess文件来完成这项工作,该文件可以查找请求中带有“.jpg”的任何内容。

对于最终用户,它们可能是等效的,但是图像上载者需要的是文件,而不是重定向。对于这一点,我不是100%赞成,但是.htaccess重写可能不可用吗?是的,url重写应该可以完成这项工作。事实上,它不会向客户端发送任何头重定向。htaccess可以工作,但我想在重定向过程中做一些php工作(如日志记录和其他工作)…htaccess会像他想做的那样做完全相同的头重定向,除了结果代码。我对此不是100%,但不会。htaccess重写可能有用吗?是的,url重写应该可以完成这项工作。事实上,它不会向客户端发送任何头重定向。htaccess可以工作,但我想在重定向过程中做一些php工作(如日志记录和其他工作)…htaccess会像他想做的那样做完全相同的头重定向,除了结果代码。这可以工作,但它会为每个请求(不仅仅是文件上传)这样做,这将破坏将其托管在子域(cdn)上的目的。如果我能让这种情况只发生在文件上传上,那就太好了,但很多人也会将图像嵌入img标签中,我不想每次都将所有图像从cdn重新下载到服务器上。在这种情况下,您可以执行类似的操作,例如输出数据并执行重定向。这会起作用,但对于每个请求(不仅仅是文件上载),它都会这样做,这将无法实现将其托管在子域(cdn)上的目的。如果我能让这种情况只发生在文件上传上,那就太好了,但是很多人也会将图像嵌入到img标签中,我不想每次都将所有图像从cdn重新下载到我的服务器上。在这种情况下,你可以做一些事情,比如输出数据并重定向。