Apache .htaccess实现CSS/JS缓存破击的规则适配求助
.htaccess缓存破击重写配置(兼容伪静态)
需求说明
- 移除路径开头的
foo*版本号:将/foo123/css/style.css重写为/css/style.css - 忽略文件名中的数字版本号:将
/css/styles.123.css重写为/css/styles.css - 需兼容已有的伪静态规则,避免404错误
正确的重写配置
将以下规则按顺序写入.htaccess文件:
RewriteEngine On # 处理路径开头的foo+版本号 RewriteRule ^foo\d+/(.*)$ /$1 [L] # 处理文件名中的数字版本号 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)\.(\d+)\.(css|js)$ $1.$3 [L] # 原有伪静态规则(保持不变) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [QSA,L]
关键说明
- 规则顺序优先级:缓存破击规则必须放在伪静态规则之前。Apache按顺序匹配规则,
[L]标记会终止后续匹配,若伪静态规则在前,会直接将带版本号的请求转发到index.php,导致缓存破击规则失效。 - 路径版本号处理:
^foo\d+/(.*)$精准匹配以foo开头后跟任意数字的路径前缀,直接剥离前缀后重写,无需额外条件(重写后会自动检查目标文件是否存在,不存在则继续走伪静态)。 - 文件名版本号处理:
RewriteCond %{REQUEST_FILENAME} !-f确保只有当带版本号的文件不存在时才执行重写(避免真实存在的同名文件被误处理),匹配文件名.数字.css/js格式,剥离中间的数字版本号。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

