列表页翻到第三页再点下一页,地址里的 page 参数不见了,页面永远停在第一页,用户以为分页功能坏了。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

return 301 https://www.example.com$request_uri;
# 或手动拼接
return 301 https://www.example.com/list?$args;

跳转只写了固定的目标地址,没有把原来的查询串一起带过去,return 默认不会带上 $args,参数在那一刻就断掉了,翻页自然回到开头。这一点先确认清楚,后面就不用反复试。

碰到「跳转丢失查询参数」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,在 return 的目标地址后面显式拼上 $args 变量,别把查询串丢掉;参数为空的时候避免留下一个孤立的问号,边界情况要处理;用带参数的地址验证一次跳转后的完整 URL,别只看状态码。

改完照着核一遍,带 page=3 的请求跳转后参数依旧保留,页面稳稳停在第三页不再回到开头。

作者 9823189