19

我正在尝试使用 Apache2 的 .htaccess 文件缓存一些文件。我想缓存一个特定的文件夹比其他任何东西都长,所以我一直在尝试使用 FilesMatch 指令,如下所示:

<FilesMatch "skins(.*)\.(jpg|png|gif)">
ExpiresDefault A2592000
</FilesMatch>

我希望能够缓存 /skins/ 目录及其子目录中的所有图像文件。但是,我不能完全让正则表达式起作用——Apache 完全忽略了它。

您如何将文件夹与<FilesMatch>.htaccess 文件中的文件夹匹配?

干杯,
马特

4

3 回答 3

27

FilesMatch 应该只匹配文件名。您可以将.htaccess文件放在skins目录中,它应该如下所示:

<FilesMatch "\.(jpg|png|gif)">
    ExpiresDefault A2592000
</FilesMatch>

或者,在 中httpd.conf,您可以使用:

<Directory path_to_the_skins_dir>
    <FilesMatch "\.(jpg|png|gif)">
        ExpiresDefault A2592000
    </FilesMatch>
</Directory>

祝你好运。

于 2009-05-16T13:16:33.210 回答
17

<Directory>并且<Location>在 .htaccess 中是不允许的,但是……</p>

您也可以在“上下文”(不仅仅是 httpd.conf)中使用<If>which is.htaccess allowed... 也请参见此处。它允许您匹配基本路径扩展以及任何其他正则表达式可以掌握的内容......</p>

测试和工作:

<If "%{REQUEST_URI} =~ m#^/_stats/.*\.(jpg|png|css|js)#">
    Header unset ETag
    FileETag None

    ExpiresActive On
    ExpiresDefault "access plus 1 day"
</If>

注意: _stats是我的重写 url,而不是传入的 URL(如果这对你有任何影响),不确定,为什么匹配对它起作用......</p>

#只是一个不同的外部“<em>gate”来表示正则表达式,而不是/用来将其标记为正则表达式。(由于我需要按/字面意义使用,这使我不必逃避/'s)。

于 2017-12-20T14:57:53.793 回答
10

Directory并且Location命令不适.htaccess用于许多共享主机。解决方案可能是.htaccess在目标子文件夹中创建,并FilesMatch在那里使用命令。

于 2016-08-22T18:25:42.040 回答