GatsbyJS-解析带有和不带“的页面URL;。html";后缀

GatsbyJS-解析带有和不带“的页面URL;。html";后缀,gatsby,Gatsby,我处于一个有点不幸的位置,几年前某人的设计选择现在影响到我重建一个网站。基本上,早在最初创建网站时,设计师就要求所有URL都使用.html扩展名(例如website.com/index.html)完全显式。我目前正在与盖茨比一起重建网站,我注意到我们需要继续解析那些旧的URL,因为它们仍然以链接的形式分散在互联网上。但是所有者希望以后不再使用这些URL,所以基本上我只需要支持为向后兼容解析它们 我一直在使用onCreatePage函数,可以让它解析.html链接,如下所示: exports.on

我处于一个有点不幸的位置,几年前某人的设计选择现在影响到我重建一个网站。基本上,早在最初创建网站时,设计师就要求所有URL都使用.html扩展名(例如website.com/index.html)完全显式。我目前正在与盖茨比一起重建网站,我注意到我们需要继续解析那些旧的URL,因为它们仍然以链接的形式分散在互联网上。但是所有者希望以后不再使用这些URL,所以基本上我只需要支持为向后兼容解析它们

我一直在使用onCreatePage函数,可以让它解析.html链接,如下所示:

exports.onCreatePage=async({page,actions})=>{
const{createPage}=操作;
控制台日志(操作);
//为URL中包含.html的所有页面创建解析程序
如果(!page.path.endsWith(“.html”)){
常量isIndex=page.path==“/”;
page.matchPath=isIndex
?page.path+“/index.html”
:page.path.replace(/\/$/,“.html”);
创建页面(第页);
}
};
但不幸的是,这只解析.html URL,而不是没有.html后缀的普通URL

有什么办法可以做到这一点吗?我应该使用不同于onCreatePage的API吗

更新: 刚刚找到,并已尝试以下操作:

exports.onCreatePage=async({page,actions})=>{
const{createRedirect}=操作;
//为URL中包含.html的所有页面创建解析程序
如果(!page.path.endsWith(“.html”)){
常量isIndex=page.path==“/”;
const legacyUrl=isIndex
?page.path+“/index.html”
:page.path.replace(/\/$/,“.html”);
log(“legacyUrl::”,legacyUrl);
createRedirect({fromPath:legacyUrl,toPath:page.path,isPermanent:true});
}
};

控制台正在输出正确的旧URL,但没有重定向。。。不确定我做错了什么…

createRedirect
可以工作,只是在开发模式下运行站点时无法工作。如果您想观察重定向在本地正常工作,您需要进行完整构建并在本地提供服务

最终代码是:

exports.onCreatePage=async({page,actions})=>{
const{createRedirect}=操作;
//为URL中包含.html的所有页面创建解析程序
如果(!page.path.endsWith(“.html”)){
常量isIndex=page.path==“/”;
const legacyUrl=isIndex
?“/index.html”
:page.path.replace(/\/$/,“.html”);
创建重定向({
fromPath:legacyUrl,
toPath:page.path,
I永久性:正确
});
}
};

在开发模式下,是否有办法使其正常工作?如果
.html
页面位于复制到最终版本的静态文件夹中,它会工作吗?我无法让它在开发模式下工作。后一个问题我不确定。。。