我想将site.com/shop/plp/、site.com/shop/plp/whatever-url和site.com/shop/plp/whatever-url?id:value都转到site.com/ shop / plp,而无需更改url或查询字符串。
我目前正在使用Gatsby和@ reach / router。
是否有一种无需借助重定向即可完成此操作的方法?
答案 0 :(得分:1)
我能够通过 Client-only routes 实现这一目标。基本上,这是盖茨比(Gatsby)内置的前端解决方案,它对所有与特定模式匹配的URL使用页面src/pages/foo.js
中的特定文件。
我有一个针对特定问题deployed here-Github repo的有效版本。尝试使用/app/...
导航到任何URL以从JSON placeholder获取数据-检查控制台输出。一些例子:
仅客户端路由能否正常工作取决于您的静态托管:
/
)然后导航到/app
时,它才能在https://zeit.co/上工作/ li>
查看这些文件:
答案 1 :(得分:0)
Advait的答案使我朝着正确的方向前进,想要添加实际的代码和所需的其他更改。
在gatsby-node.js中,在exports.createPages ...之前
exports.onCreatePage = ({ page, actions }) => {
const { createPage } = actions;
if (page.path === '/routing/') {
page.matchPath = '/routing/*';
createPage(page);
}
};
在pages / routing / index.js
render() {
console.log(this.props);
return (
<Layout>
<Container>
<TestComponent />
</Container>
</Layout>
);
}
与此问题有关的最后一步是在呈现实际页面之前防止404页面闪烁,https://github.com/gatsbyjs/gatsby/issues/5329
在404.js中
const browser = typeof window !== "undefined" && window;
const NotFoundPage = () => {
return (
browser && (
<div>
<Layout>
<Container>
<h1>404 Page</h1>
</Container>
</Layout>
</div>
)
);
};
希望这对某人有帮助