htaccess: mod_expires.c 除了一个或多个文件夹

htaccess: mod_expires.c except one or multiple folders

浏览器缓存通过mod_expires.c.htaccess...

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 day"
</IfModule>

...我想添加一个例外:一个或多个文件夹不应被缓存。 我在 [=17= 之前尝试了 Directory 的版本],但这导致了 500 内部服务器错误。那个

<Directory "/absolute/path/to/specialfolder">
ExpiresActive On
ExpiresDefault "access plus 1 seconds"
</Directory>

和那个片段

<Directory "/absolute/path/to/specialfolder">
ExpiresActive Off
</Directory>

出了什么问题,有什么帮助? (对于一个或几个文件夹)

<Directory> 指令不允许在 .htaccess 上下文中使用,它只能在服务器(或虚拟主机)上下文中使用。 (因此出现 500 错误。)

userland/.htaccess 方法是在该“特殊文件夹”中创建另一个 .htaccess 文件 ExpiresActive Off 以覆盖 parent 配置。

或者,您可以在 .htaccess 根文件中使用 <If> 表达式。

例如:

# Turn off mod_expires for a specific directory
<If "%{REQUEST_URI} =~ m#^/specialfolder/#"> 
    ExpiresActive Off
</If>

其中 REQUEST_URI 是 document-root-relative URL-path。

或者,仅在 请求这些文件夹时使用 mod_expires。例如:

# Only use mod_expires when NOT requesting the specific directories
<If "%{REQUEST_URI} !~ m#^/(specialfolder|anotherfolder)/#"> 
ExpiresActive On
ExpiresDefault "access plus 1 day"
</IfModule>

One or more folders shall not be cached.

尽管禁用 mod_expires 并不一定会阻止资源被缓存。它只是阻止 mod_expires 设置 Cache-Control(和 Expires)header。如果您特别想禁用缓存,请考虑直接显式设置相关的 Cache-Control/Expires header(s)。

例如:

# Set env var when special "none-cache" folder requested:
SetEnvIf Request_URI "^/(specialfolder|anotherfolder)/" NOCACHE

# Set no-cache headers if NOCACHE env var is set
Header always set Cache-Control "no-store" env=NOCACHE
Header always set Expires "0" env=NOCACHE

在此示例中,您不需要禁用 mod_expires,因为 Header 指令将覆盖 mod_expires(因为 mod_headers 在 之后处理 mod_expires).