.htaccess规则用于压缩具有自定义扩展名的文件

时间:2013-01-07 20:41:44

标签: apache .htaccess mod-deflate

我直接从html5boilerplate.com复制了以下.htaccess文件:

<IfModule mod_deflate.c>
    # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
    <IfModule mod_setenvif.c>
        <IfModule mod_headers.c>
          SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
          RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
        </IfModule>
    </IfModule>

    AddOutputFilterByType DEFLATE application/atom+xml \
                                application/javascript \
                                application/json \
                                application/rss+xml \
                                application/vnd.ms-fontobject \
                                application/x-font-ttf \
                                application/xhtml+xml \
                                application/xml \
                                font/opentype \
                                image/svg+xml \
                                image/x-icon \
                                text/css \
                                text/html \
                                text/plain \
                                text/x-component \
                                text/xml
</IfModule>

YSlow只显示一个未压缩的文件,其文件名为testing.cache,其内容是html和css的混合。我将文件重命名为testing.html,文件压缩得很好。我期望testing.cache文件也会被压缩,因为它属于text/html组(这是我在页面加载时通过ajax加载的文件)。所以,我想知道我是否可以这样:

<FilesMatch "\.(cache)$">
    someDirectiveToCache .cache file
</FilesMatch>

我看了mod_deflate任何匹配指令,但没有运气。当然,我可以将其保留为testing.html,但我想知道如何为testing.cache做到这一点。另外,我假设FilesMatch可以在<IfModule mod_deflate.c>模块中使用,因为它可以在<IfModule mod_expires.c>内使用(测试并使用它),如下所示:

<FilesMatch "\.(cache)$">
    ExpiresDefault "access plus 1 hour"
</FilesMatch>

我的Apache版本(如果重要)是: 2.2.15

1 个答案:

答案 0 :(得分:5)

我设法让这个工作,实际上最终很容易。我浏览了所有文档,找到了AddOutputFilter指令,这个指令很简单,实际上可以使用扩展。

版本2.2的文档中所述的AddOutputFilter directive syntax是:

AddOutputFilter filter[;filter...] extension [extension] ...

在我添加AddOutputFilterByType指令后的示例中:

AddOutputFilter DEFLATE cache

希望这有助于将来。