0


我的 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>

谢谢你。

4

0 回答 0