我的网站上有这样的网址图片:
http://mysite.com/image1.jpg
我的服务器使用php重定向到包含实际文件的子域,如下所示:
header('Location: http://images.mysite.com/image1.jpg');
这几乎适用于所有目的,例如在img标记中或在本地保存文件时。这两个网址基本上等同于这些目的。但是,当我访问带有图像上传器的网站时,如tumblr或imgur,并尝试上传第一个网址,它会失败(说“上传照片时出错”或“图片格式不受支持,或图片已损坏。”)
有没有办法让这项工作?我尝试发送不同的状态标题,但它们没有帮助。
修改
根据建议,我可以使用htaccess重定向或打开文件并发送内容来执行此操作。这可以正常工作,除非我不希望在用户将文件用于其他目的时发生这种情况,例如将其嵌入到img标记中。这是因为我的images.mysite.com域是用于托管我的图像内容的cdn,如果我必须从我的Web服务器保留内容,它将失败它的目的。并且htaccess不可行,因为我想在请求第一个url时运行一些php脚本。
如果我能以某种方式检测它何时通过文件上传器使用,那么我可以单独处理其他情况。但我不认为我能发现这一点,是吗?
编辑2(解决方案):
好吧,我做了一个hacky妥协:事实证明,上传请求通常在标题中没有“accept_charset”参数,而嵌入请求则有。使用此功能,我可以检测何时请求上传图像,然后下载该图像并发送内容。不是一个坚如磐石的解决方案,但它运作良好。谢谢你们!
答案 0 :(得分:2)
您的图片上传器网站似乎没有遵循您所做的重定向。因此,要使其工作,而不是重定向,您应该打开远程文件并发送其内容。
答案 1 :(得分:1)
你无法做到这一点,因为图片上传服务需要一个实际的图片文件,他们不会遵循任何重定向。
答案 2 :(得分:1)
您不应将标准结果代码(200 - OK)用于标题重定向。
答案 3 :(得分:1)
正如其他海报所说,图片上传服务会读取您网址返回的数据
http://mysite.com/image1.jpg
作为图像文件 - 这就是重定向混淆这些服务的原因。
为什么不使用从外部源读取图像的PHP脚本而不是重定向,然后打印出二进制数据?您可以使用.htaccess文件来完成此操作,该文件在请求中查找任何带有“.jpg”的内容。