Apache FilesMatch - 匹配正则表达式中的文件夹

fis*_*eny 12 regex apache .htaccess mod-expires

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

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

我希望能够将所有图像文件缓存在/ skins /目录及其子目录中.但是,我无法完全使用正则表达式--Aracle只是完全忽略它.

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

干杯,
马特

ara*_*aya 19

FilesMatch应该只匹配文件名,所以您可以将.htaccess文件放在"skins"目录中,它应该看起来像,

<FilesMatch "\.(jpg|png|gif)">
    ExpiresDefault A2592000
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

或者如果在httpd.conf文件中你可以使用,

<Directory path_to_the_skins_dir>
    <FilesMatch "\.(jpg|png|gif)">
        ExpiresDefault A2592000
    </FilesMatch>
</Directory>
Run Code Online (Sandbox Code Playgroud)

祝好运


T.T*_*dua 6

Directory并且Location命令不能在.htaccess许多主机上使用。解决方案可能是.htaccess在目标子文件夹中创建,然后在其中使用FilesMatch命令。

  • 我觉得自己像个白痴一整天都在尝试这样做......读了你的回复,就像是 DUH!那就是这么简单。谢谢! (2认同)

Fra*_*cke 6

<Directory>并且<Location>不允许在.htaccess中使用,但是…

您可以使用<If>也允许在“上下文”.htaccess(不只是httpd.conf中)......还看到这里。它使您可以匹配基本路径扩展名以及RegExp可以掌握的其他内容…

经过测试和工作:

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

    ExpiresActive On
    ExpiresDefault "access plus 1 day"
</If>
Run Code Online (Sandbox Code Playgroud)

注意: _stats是我的重写URL,而不是传入URL(如果对您而言有任何不同),不确定是为什么匹配对该URL起作用…

#只是一个不同的外部“ gate ”来表示正则表达式,而不是用于将/其标记为正则表达式。(因为我需要使用/其字面意义,所以这使我不必转义/)。