Php mod_重写后jpg文件的HTTP头

Php mod_重写后jpg文件的HTTP头,php,apache,mod-rewrite,header,jpeg,Php,Apache,Mod Rewrite,Header,Jpeg,我使用Apache的mod_rewrite将JPG文件请求路由到我的web根目录之外的目录 通常情况下,效果良好,但也有一些图像无法显示。然后我意识到,当我在图像URL上使用PHP的get_headers()函数时,它们都会返回 内容类型:text/html;charset=UTF-8而不是正确的图像/jpeg头类型 我尝试过显式设置内容类型:image/jpeg标题,但仍然没有一幅图像返回正确的标题-尽管大多数图像显示正确,但我不确定原因 当通过mod_rewrite重定向时,如何确保JPG文

我使用Apache的
mod_rewrite
将JPG文件请求路由到我的web根目录之外的目录

通常情况下,效果良好,但也有一些图像无法显示。然后我意识到,当我在图像URL上使用PHP的
get_headers()
函数时,它们都会返回
内容类型:text/html;charset=UTF-8
而不是正确的
图像/jpeg
头类型

我尝试过显式设置
内容类型:image/jpeg
标题,但仍然没有一幅图像返回正确的标题-尽管大多数图像显示正确,但我不确定原因


当通过
mod_rewrite
重定向时,如何确保JPG文件以正确的标题发送?

这是您可以做的。创建一个PHP文件,该文件将获得正确的文件并将其传递给用户

<?php 
$sImage = 'imagename.jpg';
header("Content-Type: image/jpeg");
header("Content-Length: " .(string)(filesize($sImage)) );

echo file_get_contents($sImage);
您还可以使用
T
标志,使用mod_rewrite设置内容类型标题字段:

RewriteRule … … [T=image/jpeg]
那不是.jpg的图像呢。像.gif

您需要使用(已弃用)或扩展来确定要发送的内容类型


编辑:我不建议这样做,但是如果您使用的是特定的文件扩展名子集,您还可以创建一个内容类型的小字典数组,并使用文件扩展名来确定要发送的内容类型。

fpassthru()
是一个更好的选择,您不需要将整个文件加载到内存中。谢谢,最后我使用PHP和fpassthru函数指定了标题。非常感谢,非常有用。
RewriteRule … … [T=image/jpeg]