Я использую 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 для определения того, какой тип содержимого нужно отправить.
Изменить: я не рекомендую это, но если вы работаете с определенным подмножеством расширений файлов, вы также можете создать небольшой массив слов из типов содержимого и использовать расширение файла, чтобы определить, какой из них нужно отправить.