HTTP headers for jpg files after mod_rewrite

apache, header, jpeg, mod-rewrite, php

Solution

This is what you could do. Create a PHP file that will get the right file and passes it through

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

echo file_get_contents($sImage);

or

<?php
$sImage = 'imagename.jpg';
$rFP = fopen($sImage, 'rb');

header("Content-Type: image/jpeg");
header("Content-Length: " .(string)(filesize($sImage)) );

fpassthru($rFP);
exit;

or in your Apache vhost config or .htaccess file

RewriteRule … … [T=image/jpeg]

Problem

I'm using Apache's `mod_rewrite` to route requests for JPG files to a directory outside my web root. It generally has been fine, but there are a few images that do not display. I then realized that when I use PHP's `get_headers()` function on my image URLs, they are all returning `Content-Type: text/html; charset=UTF-8` instead of the proper `image/jpeg` header types. I have tried explicitly setting the `Content-Type: image/jpeg` header and still, none of my images return the correct headers - although most do display correctly, but I'm not sure why. How can I assure a JPG file is sent with the correct header when redirecting via `mod_rewrite`?

Original source