Gatsby搭配Nginx出现尾部斜杠重复跳转问题排查求助
问题根因排查
你遇到的两次跳转问题核心是Nginx内置的目录自动加斜杠重定向逻辑和Gatsby的静态文件结构、无尾部斜杠的路径需求不匹配,具体出在location /块的try_files $uri $uri/ =404;配置:
- 当你访问无尾部斜杠的路径(如
/about)时,Nginx会先查找$uri(即/about文件),找不到就会匹配$uri/(即/about目录) - 如果该目录存在,Nginx内置逻辑会直接返回301重定向到带尾部斜杠的
/about/路径 - 之后你的Gatsby配置或重定向规则又会把带斜杠的路径跳回无斜杠版本,就形成了两次不必要的跳转
修复方案
只需要修改server_name www.example.com对应的443 server块配置即可:
- 首先在server块下新增3条配置,禁用Nginx默认的强制全路径重定向规则,避免自动补全域名、端口、斜杠:
absolute_redirect off; server_name_in_redirect off; port_in_redirect off;
- 替换原有的
location /块内容,调整文件查找逻辑,去掉$uri/匹配,同时主动把带斜杠的路径重定向到无斜杠版本:
location / { # 所有带尾部斜杠的请求统一永久重定向到无斜杠版本 rewrite ^/(.*)/$ /$1 permanent; # 调整静态文件查找顺序,优先匹配对应html文件、目录下的index.html,不会触发目录自动加斜杠逻辑 try_files $uri $uri.html $uri/index.html =404; }
修改完成后先执行nginx -t验证配置语法正确,再执行nginx -s reload重载配置即可生效。
内容的提问来源于stack exchange,提问作者Robin Wieruch
相关产品推荐
相关产品推荐

