【发布时间】:2015-07-29 05:27:36
【问题描述】:
如何在 PHP + Apache 中设置过期标头?我目前正在使用 auto_prepend 来提供压缩后的资源,但我还想最大化 HTTP 缓存。
如何设置这些?
【问题讨论】:
标签: php performance apache http
如何在 PHP + Apache 中设置过期标头?我目前正在使用 auto_prepend 来提供压缩后的资源,但我还想最大化 HTTP 缓存。
如何设置这些?
【问题讨论】:
标签: php performance apache http
有两种方法可以做到这一点。首先是在您的 php 代码中指定标头。如果您想以编程方式调整到期时间,这很好。例如,wiki 可以为不经常编辑的页面设置更长的过期时间。
header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + (60 * 60))); // 1 hour
您的第二个选择是创建一个 .htaccess 文件或修改您的 httpd 配置。在共享主机环境中,修改 .htaccess 文件是很常见的。为此,您需要知道您的服务器是否支持 mod_expires、mod_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
【讨论】:
Header,您需要 mod_headers。例如运行a2enmod 并输入headers 然后重启Apache。
gmdate('r'),它提供了有效的 RFC 2822 表示形式。
这个 Apache 模块可能会有所帮助: http://httpd.apache.org/docs/2.0/mod/mod_expires.html
【讨论】:
你尝试过类似的东西吗?
<?php
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
?>
【讨论】: