当我使用重定向时,其他网站无法从我的网站上传图像


Other websites can't upload images from my site when I am using redirects

我有一个网站,有这样的url图像:

http://mysite.com/image1.jpg

我的服务器使用php重定向到包含实际文件的子域,如:

header('Location: http://images.mysite.com/image1.jpg');

这几乎适用于所有目的,例如在img标记中或在本地保存文件时。对于这些目的,这两个url本质上是等价的。然而,当我去一个网站与图像上传,如tumblr或imgur,我试图上传第一个url,它失败了(说"上传照片错误"或"图像格式不支持,或图像损坏。")。

有办法让这个工作吗?我试着发送不同的状态标头,但是没有帮助。

编辑:

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

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

EDIT 2 (SOLUTION):

好吧,我做了一个hack妥协:事实证明,上传请求通常没有一个"accept_charset"参数在头部,而嵌入请求做。使用它,我可以检测到何时需要上传图像,然后下载该图像并发送内容。这不是一个坚如磐石的解决方案,但它运行得很好。谢谢你们了!

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

你不能这样做,因为图像上传服务需要一个实际的图像文件,他们不遵循任何重定向

你不应该使用标头重定向的标准结果代码(200 - OK)

看一下这个关于如何发送结果代码的教程。

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

http://mysite.com/image1.jpg

作为一个图像文件——这就是为什么重定向会混淆这些服务。

比起重定向,为什么不使用PHP脚本从外部源读取图像,然后打印出二进制数据呢?您可以使用.htaccess文件来完成此操作,该文件查找请求中带有".jpg"的任何内容。