htaccess:缓存所有图像,但排除子文件夹中的缓存图像
htaccess: cache all images but exclude caching images from subfolder
我想将所有图像缓存 1 个月,效果很好,但问题是当我尝试从缓存中排除子目录时。
所以有图片:
/ (base dir)
/IMG/
/IMG/folder/
IMG/BIG/
因此所有图像都需要缓存,但我想让它不缓存 IMG/BIG/ 文件夹
上的图像
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
</IfModule>
上面的代码有效但是当
我尝试使用此代码排除 /IMG/BIG 然后它不起作用
<Directory "/IMG/BIG">
<FilesMatch "\.(jpg|png)$">
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>
</FilesMatch>
</Directory>
我想在根文件夹中的 .htaccess 中解决这个问题,而不是通过在 /IMG/big 文件夹中添加另一个 .htaccess
ExpiresByType image/jpg "access plus 1 month"
旁白: JPEG 文件的正确 mime-type 是 image/jpeg
,而不是 image/jpg
,所以上面可能没有做任何事情.
.htaccess
中不允许使用 <Directory>
指令 - 这应该会导致 500 内部服务器错误(详细信息将在您服务器的错误日志中)。
不需要 <IfModule>
包装器,除非您打算在未启用 mod_expires and/or mod_headers 的多个服务器上使用相同的配置(不太可能)。
要定位除 /IMG/BIG
子目录之外的所有其他内容,您可以使用 <If>
表达式并使用取反的正则表达式(!~
运算符检查 REQUEST_URI
服务器变量).例如:
<If "%{REQUEST_URI} !~ m#^/IMG/BIG/#">
ExpiresActive on
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
</If>
要专门覆盖 /IMG/BIG/
请求的任何 headers,您可以添加一个 <Else>
指令:
<Else>
<FilesMatch "\.(jpg|png)$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</FilesMatch>
</Else>
除非 /IMG/BIG/
目录中有其他文件类型需要缓存,否则您可以删除 <FilesMatch>
容器。
我想将所有图像缓存 1 个月,效果很好,但问题是当我尝试从缓存中排除子目录时。
所以有图片:
/ (base dir)
/IMG/
/IMG/folder/
IMG/BIG/
因此所有图像都需要缓存,但我想让它不缓存 IMG/BIG/ 文件夹
上的图像<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
</IfModule>
上面的代码有效但是当
我尝试使用此代码排除 /IMG/BIG 然后它不起作用
<Directory "/IMG/BIG">
<FilesMatch "\.(jpg|png)$">
<IfModule mod_expires.c>
ExpiresActive Off
</IfModule>
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>
</FilesMatch>
</Directory>
我想在根文件夹中的 .htaccess 中解决这个问题,而不是通过在 /IMG/big 文件夹中添加另一个 .htaccess
ExpiresByType image/jpg "access plus 1 month"
旁白: JPEG 文件的正确 mime-type 是 image/jpeg
,而不是 image/jpg
,所以上面可能没有做任何事情.
.htaccess
中不允许使用 <Directory>
指令 - 这应该会导致 500 内部服务器错误(详细信息将在您服务器的错误日志中)。
不需要 <IfModule>
包装器,除非您打算在未启用 mod_expires and/or mod_headers 的多个服务器上使用相同的配置(不太可能)。
要定位除 /IMG/BIG
子目录之外的所有其他内容,您可以使用 <If>
表达式并使用取反的正则表达式(!~
运算符检查 REQUEST_URI
服务器变量).例如:
<If "%{REQUEST_URI} !~ m#^/IMG/BIG/#">
ExpiresActive on
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
</If>
要专门覆盖 /IMG/BIG/
请求的任何 headers,您可以添加一个 <Else>
指令:
<Else>
<FilesMatch "\.(jpg|png)$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</FilesMatch>
</Else>
除非 /IMG/BIG/
目录中有其他文件类型需要缓存,否则您可以删除 <FilesMatch>
容器。