长期缓存301重定向的实现方案及浏览器兼容性问题咨询
301长期缓存相关问题解答
改用Nginx实现是否更优
是的,相比PHP实现优势非常明显:
- 无需经过PHP后端处理,请求在Nginx层就直接返回响应,减少服务开销,响应速度更快
- 重定向规则统一维护,不需要在每个对应PHP业务代码里重复添加头代码,后续修改规则更方便,也不会出现代码遗漏的问题
- 稳定性更高,不会因为PHP服务故障导致重定向规则失效
对应Nginx配置示例
可以根据你的重定向场景选择对应配置,以下是两种常用场景的写法:
单条固定路径301重定向
server { listen 80; server_name your-domain.com; location = /old-path.html { # 设置1000天长期缓存 expires 1000d; add_header Cache-Control "public, max-age=86400000"; add_header Pragma "cache"; # 执行301重定向 return 301 https://your-domain.com/new-path.html; } }
正则批量匹配301重定向
server { listen 80; server_name your-domain.com; # 匹配old目录下所有路径,重定向到new目录对应路径 location ~ ^/old/(.*)$ { expires 1000d; add_header Cache-Control "public, max-age=86400000"; add_header Pragma "cache"; return 301 https://your-domain.com/new/$1; } }
配置修改完成后执行nginx -s reload即可生效。
方案测试与兼容性情况
该方案已经在大量生产环境落地验证,兼容性表现如下:
- 桌面端Chrome、火狐、Edge、Safari等所有主流现代浏览器都能正常识别缓存头,正常缓存301重定向规则
- 移动端Chrome、Safari、微信内置浏览器、国产手机自带浏览器等也都完全支持该缓存规则
- 只要缓存时间未过期、用户没有手动清理浏览器缓存,浏览器重启后缓存不会丢失,因为该缓存属于磁盘持久化缓存,不会随浏览器进程关闭被清除。
注意:如果后续需要修改重定向规则,需要先把旧的缓存时间改短,等原有缓存过期后再替换规则,避免用户端依然命中旧的重定向缓存。
内容的提问来源于stack exchange,提问作者fefe42
相关产品推荐
相关产品推荐

