【问题标题】:HTTP headers for jpg files after mod_rewritemod_rewrite 后 jpg 文件的 HTTP 标头
【发布时间】:2022-04-13 16:01:39
【问题描述】:

我正在使用 Apache 的 mod_rewrite 将 JPG 文件请求路由到我的 Web 根目录之外的目录。

总体上没问题,但有一些图像没有显示。然后我意识到,当我在图像 URL 上使用 PHP 的 get_headers() 函数时,它们都返回
Content-Type: text/html; charset=UTF-8 而不是正确的 image/jpeg 标头类型。

我已尝试显式设置 Content-Type: image/jpeg 标头,但我的图像都没有返回正确的标头 - 尽管大多数图像都能正确显示,但我不知道为什么。

当通过mod_rewrite 重定向时,如何确保发送带有正确标题的 JPG 文件?

【问题讨论】:

    标签: php apache mod-rewrite header jpeg


    【解决方案1】:

    这是你可以做的。创建一个 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;
    

    或在您的 Apache vhost 配置或 .htaccess 文件中

    RewriteRule … … [T=image/jpeg]
    

    【讨论】:

    • fpassthru() 是更好的选择,您不需要将整个文件加载到内存中。
    • 谢谢,我最终使用 PHP 和 fpassthru 函数指定了标题。
    【解决方案2】:

    您还可以使用带有 T 标志的 mod_rewrite 设置 Content-Type 标头字段:

    RewriteRule … … [T=image/jpeg]
    

    【讨论】:

    • 非常感谢,非常有帮助。
    【解决方案3】:

    不是.jpg的图像怎么样。比如.gif,...

    您需要使用mime_content_type()(已弃用)或fileinfo 扩展来确定要发送的内容类型。

    编辑:我不建议这样做,但如果您正在使用文件扩展名的特定子集,您还可以创建一个内容类型的小型字典数组并使用文件扩展名来确定要发送哪个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-07
      • 2010-09-28
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多