Заголовки HTTP для файлов jpg после mod_rewrite - PullRequest
3 голосов
/ 13 октября 2009

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 13 октября 2009

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

RewriteRule … … [T=image/jpeg]
9 голосов
/ 13 октября 2009

Это то, что вы могли бы сделать. Создайте файл 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;
0 голосов
/ 22 ноября 2010

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

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

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

...