我的 PHP 脚本中有以下代码,它为我网站的所有页面生成 HTML:
if( !headers_sent() and !ob_get_length() ) {
$days = 30;
header('Last-Modified: ' . date( 'D, d M Y H:i:s', $mtime ));
header('Expires: ' . date( 'D, d M Y H:i:s', strtotime('+' . $days . ' days') ) . ' GMT');
header('Cache-Control: max-age=' . 60*24*$days . ', public, must-revalidate');
header('Pragma: public');
ini_set( 'zlib.output_compression_level', 1 );
ob_start( 'ob_gzhandler' );
header( 'Content-Type: text/html; charset=' . strtolower( $this->PageCharset ) );
header( 'Connection: Keep-alive' );
}
无论如何,我无法理解一件事:这是否也适用于所有图像、javascript 和 CSS 或仅适用于页面?
在 .htaccess 中,我知道我可以应用以下指令来控制所有类型文件的缓存和压缩,包括 css、js、图像等。但我的共享托管服务不允许使用其中一些指令(Header、SetEnvIfNoCase) . 那么在不使用 Apache 指令的情况下如何控制所有文件类型的缓存和压缩呢?
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 10 days"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/plain "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-icon "access plus 1 year"
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(js|css|xml|gz)$">
Header append Vary Accept-Encoding
</FilesMatch>
<FilesMatch "\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "public"
</FilesMatch>
<FilesMatch "\.(css)$">
Header set Cache-Control "public"
</FilesMatch>
<FilesMatch "\.(js)$">
Header set Cache-Control "private"
</FilesMatch>
<FilesMatch "\.(x?html?|php)$">
Header set Cache-Control "private, must-revalidate"
</FilesMatch>
</IfModule>
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
# Don’t compress
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
#Dealing with proxy servers
<IfModule mod_headers.c>
Header append Vary User-Agent
</IfModule>
</IfModule>
谢谢你。