应使用 rewrite ^/$ 目标路径 permanent 精准匹配根路径并301跳转;推荐置于 location = / 块中,避免循环与误匹配,带参跳转需手动拼接 ? 或 $args。

直接用 rewrite 指令匹配根路径 /,再跳转到目标子页面即可,关键是正则精准、flag 选对、避免循环。
匹配根路径的写法要准确
根路径就是请求 URI 完全等于 /,不带任何参数或后续路径。不能写成 ^/.*$ 或 ^/$ 后面漏了锚点,否则可能误伤其他路径。
推荐写法:
-
rewrite ^/$ /login.html permanent;→ 跳转到/login.html -
rewrite ^/$ /dashboard/ permanent;→ 跳转到目录,注意末尾斜杠会保留 -
rewrite ^/$ https://example.com/app/ permanent;→ 跳转到外部完整 URL
选 permanent 还是 redirect?
永久重定向(301)更常用,适合生产环境:
- permanent:返回 301,浏览器和搜索引擎会缓存跳转关系,利于 SEO 和权重传递
- redirect:返回 302,临时跳转,适合测试或短期调整
除非明确需要临时行为,否则优先用 permanent。
放在 server 还是 location 块里?
建议放在 server 块顶层,或单独的 location = / 中:
-
location = / { rewrite ^/$ /home/index.html permanent; }—— 最安全,只匹配严格根路径,不干扰其他请求 - 直接写在
server块里也行,但要注意顺序:rewrite 规则按书写顺序执行,靠前的先匹配 - 避免放在宽泛的
location /里,否则可能被后续规则覆盖或引发重复匹配
带查询参数的跳转怎么处理?
如果目标子页面需要固定参数(比如 /app/?sso=1),直接写进 replacement 即可:
-
rewrite ^/$ /app/?sso=1 permanent;—— 注意问号要原样写出,Nginx 不会自动拼接 $args - 若需保留原请求参数,用
$args变量:rewrite ^/$ /app/?sso=1&$args permanent; - 但注意:当
$args为空时,末尾的&会多余,可用if判断优化,不过简单场景通常可接受











