如何编写Apache/.htaccess规则,实现指定结构缓存文件优先加载?
Apache .htaccess 缓存优先加载配置方案
核心规则实现
将以下代码添加到网站根目录的.htaccess文件中:
# 开启URL重写引擎 RewriteEngine On # 仅针对GET请求处理(避免POST等请求被缓存拦截) RewriteCond %{REQUEST_METHOD} GET # 匹配URL结构:/typeOfPost/category/ID/permalink RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([0-9]+)/([^/]+)/?$ # 检查对应缓存文件是否存在 RewriteCond %{DOCUMENT_ROOT}/cache/responsive/%3/%1/%2/%4 -f # 如果缓存存在,直接重写到缓存文件 RewriteRule ^ /cache/responsive/%3/%1/%2/%4 [L] # 缓存不存在时,转发到PHP入口处理(根据你的实际入口文件调整) RewriteRule ^ index.php [L]
规则说明
RewriteEngine On:启用Apache的URL重写模块,是所有重写规则的基础。RewriteCond %{REQUEST_METHOD} GET:只对GET请求应用缓存规则,避免提交表单等POST请求被错误拦截。RewriteCond %{REQUEST_URI} ^/([^/]+)/([^/]+)/([0-9]+)/([^/]+)/?$:精确匹配你的URL结构,用正则分组捕获typeOfPost(组1)、category(组2)、ID(组3,限定为数字)、permalink(组4),末尾的/?允许URL带或不带斜杠。RewriteCond %{DOCUMENT_ROOT}/cache/responsive/%3/%1/%2/%4 -f:检查服务器上对应的缓存文件是否存在(-f表示是普通文件),用之前捕获的分组变量对应到缓存路径的各个部分。RewriteRule ^ /cache/responsive/%3/%1/%2/%4 [L]:如果缓存文件存在,直接返回该文件内容,[L]表示这是最后一条规则,停止后续处理。RewriteRule ^ index.php [L]:如果缓存不存在,将请求转发到PHP入口文件(如果你的入口不是index.php,替换成实际文件名),由PHP从数据库加载内容并生成缓存。
注意事项
- 确保Apache已启用
mod_rewrite模块,否则规则无法生效。 - 缓存目录(
/cache/responsive/)需要设置正确的权限,确保Apache服务器进程有读取权限。 - 清理缓存时,直接删除对应ID目录下的缓存文件即可,下次请求会自动重新生成。
内容的提问来源于stack exchange,提问作者Francesco
相关产品推荐
相关产品推荐

