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).
到浏览器缓存通过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).