HTTP-заголовки для jpg-файлов после mod_rewrite

Я использую mod_rewrite от Apache для маршрутизации запросов на файлы JPG в каталог вне моего веб-корня.

Как правило, это было хорошо, но есть несколько изображений, которые не отображаются. Затем я понял, что когда я использую get_headers() PHP на своих URL-адресах изображений, все они возвращаются
Content-Type: text/html; charset=UTF-8 Content-Type: text/html; charset=UTF-8 вместо правильных типов заголовков image/jpeg .

Я попытался явно установить заголовок Content-Type: image/jpeg и все же, ни одно из моих изображений не вернет правильные заголовки, хотя большинство из них отображают правильно, но я не уверен, почему.

Как я могу заверить, что файл JPG отправляется с правильным заголовком при перенаправлении через mod_rewrite ?

Это то, что вы могли бы сделать. Создайте файл PHP, который получит правильный файл и передает его

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

или

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

Вы также можете установить поле заголовка Content-Type с помощью mod_rewrite с флагом T :

 RewriteRule … … [T=image/jpeg] 

Как насчет изображения, которое не является .jpg. Как .gif, …

Вам нужно будет использовать mime_content_type () (который устарел) или расширение fileinfo для определения того, какой тип содержимого нужно отправить.

Изменить: я не рекомендую это, но если вы работаете с определенным подмножеством расширений файлов, вы также можете создать небольшой массив слов из типов содержимого и использовать расширение файла, чтобы определить, какой из них нужно отправить.