location / {
try_files $uri $uri/ /index.php?$query_string;
}
rewrite ^/old/(.*)$ /new/$1 permanent;
加了伪静态规则后首页打不开,浏览器提示重定向次数过多。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,重写后的地址仍匹配同一条规则,请求被反复重写,浏览器在若干次之后判定为循环并终止。
围绕「Nginx rewrite 循环」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
处理上按这个顺序:用 last 或 break 控制流程;给规则加排除条件;用 return 替代多段 rewrite。
改完只确认一件事:访问旧地址只跳转一次,首页与内页都能正常打开。