Search code examples
phpapachemod-rewriteheaderjpeg

HTTP headers for jpg files after mod_rewrite


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?


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]