Gatsby如何将所有www页面请求重定向至对应非www版本
Gatsby 实现www域名全域301重定向到非www版本的可行方案
createRedirect 是Gatsby提供的同域路径级重定向API,本身不支持跨域名、全域通配的域名匹配规则,无法直接满足这类域名级重定向需求,可根据你的站点托管方式选择以下方案,优先推荐托管层配置,性能和SEO表现最好:
方案1:托管平台/边缘层配置重定向(最推荐)
域名级重定向放在请求接入层处理,不需要侵入业务代码,返回标准301状态码,对SEO友好,跳转延迟最低,是静态站点的首选实现方式:
- 若使用Netlify托管:在项目
static目录下新建_redirects文件,写入以下规则即可:
https://www.yourdomain.com/* https://yourdomain.com/:splat 301!
构建后该文件会自动输出到产物根目录,Netlify边缘节点会自动识别规则完成跳转。
- 若使用Vercel托管:在项目根目录新建
vercel.json,添加如下重定向配置:
{ "redirects": [ { "source": "/(.*)", "has": [{ "type": "host", "value": "www.yourdomain.com" }], "destination": "https://yourdomain.com/$1", "permanent": true } ] }
- 若使用Nginx自托管:在Nginx配置中单独添加www域名的server块,配置全域跳转:
server { listen 80; listen 443 ssl; server_name www.yourdomain.com; # 此处补充你的SSL证书配置 return 301 https://yourdomain.com$request_uri; }
- 若域名接入Cloudflare解析:直接在Cloudflare控制台添加页面规则,匹配规则设为
www.yourdomain.com/*,执行动作为「转发URL-301永久重定向」,目标地址设为https://yourdomain.com/$1即可,不需要修改项目代码。 - 若使用Apache托管:安装
gatsby-plugin-htaccess插件,在插件配置中开启nonWWW选项,构建时会自动生成包含www跳转规则的.htaccess文件到产物目录。
方案2:客户端兜底重定向(不推荐,仅作降级方案)
如果没有权限修改托管层配置,可以在客户端做兜底跳转,但这类跳转需要等页面JS加载完成后才会执行,会出现首屏闪烁,且搜索引擎无法识别为301永久重定向,会影响SEO表现。
在项目根目录的gatsby-browser.js中添加以下逻辑:
export const onClientEntry = () => { if (typeof window !== 'undefined' && window.location.host.startsWith('www.')) { const targetUrl = new URL(window.location.href); targetUrl.host = targetUrl.host.replace(/^www\./, ''); window.location.replace(targetUrl.toString()); } };
注意:不要尝试用
createRedirect枚举所有路径做跳转,一方面构建时会生成海量冗余重定向规则拖慢构建速度,另一方面无法覆盖动态生成的客户端路由,完全没有可行性。
内容的提问来源于stack exchange,提问作者user737163
相关产品推荐
相关产品推荐

