【问题标题】:Setup HTTP expires headers using PHP and Apache使用 PHP 和 Apache 设置 HTTP 使标头过期
【发布时间】:2015-07-29 05:27:36
【问题描述】:

如何在 PHP + Apache 中设置过期标头?我目前正在使用 auto_prepend 来提供压缩后的资源,但我还想最大化 HTTP 缓存。

如何设置这些?

【问题讨论】:

    标签: php performance apache http


    【解决方案1】:

    有两种方法可以做到这一点。首先是在您的 php 代码中指定标头。如果您想以编程方式调整到期时间,这很好。例如,wiki 可以为不经常编辑的页面设置更长的过期时间。

    header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + (60 * 60))); // 1 hour
    

    您的第二个选择是创建一个 .htaccess 文件或修改您的 httpd 配置。在共享主机环境中,修改 .htaccess 文件是很常见的。为此,您需要知道您的服务器是否支持 mod_expiresmod_headers 或两者。最简单的方法就是反复试验,但某些 Apache 服务器被配置为允许您通过 /server-info 页面查看此信息。如果您的服务器同时具有 mod_expires 和 mod_headers,并且您想设置静态资源的过期时间,请尝试将其放入您的 .htaccess 文件中:

    # Turn on Expires and set default to 0
    ExpiresActive On
    ExpiresDefault A0
    
    # Set up caching on media files for 1 year (forever?)
    <FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
    ExpiresDefault A29030400
    Header append Cache-Control "public"
    </FilesMatch>
    

    有关其他组合和更多示例,请参阅:http://www.askapache.com/htaccess/speed-up-your-site-with-caching-and-cache-control.html

    【讨论】:

    • 所以我认为 .flv、.ico 等会自动在它们前面加上正确的标题是对的吗?很酷
    • Header append Cache-Control "public" => 这一行给了我一个 500 内部服务器错误。
    • @noobcode 我有完全相同的问题。请问你是怎么解决的?
    • 要使用Header,您需要 mod_headers。例如运行a2enmod 并输入headers 然后重启Apache。
    • 请注意,您可以只使用gmdate('r'),它提供了有效的 RFC 2822 表示形式。
    【解决方案2】:

    这个 Apache 模块可能会有所帮助: http://httpd.apache.org/docs/2.0/mod/mod_expires.html

    【讨论】:

    • 在使用 PHP 替代方案之前,我也会考虑使用 mod_expires。
    【解决方案3】:

    你尝试过类似的东西吗?

    <?php
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2016-09-26
      • 1970-01-01
      相关资源
      最近更新 更多