Gatsby 在盖茨比中,有没有办法将所有具有相同基本url段的url路由到同一页面?

Gatsby 在盖茨比中,有没有办法将所有具有相同基本url段的url路由到同一页面?,gatsby,Gatsby,我希望site.com/shop/plp/、site.com/shop/plp/whatever-url和site.com/shop/plp/whater-url?id:value可以全部转到site.com/shop/plp,而不更改url或查询字符串 我目前正在使用盖茨比和@reach/router 有没有办法不用重定向就可以实现这一点?我可以通过实现这一点。基本上,它是内置在盖茨比中的前端解决方案,它使用pagessrc/pages/foo.js中的一个特定文件,用于匹配特定模式的所有UR

我希望site.com/shop/plp/、site.com/shop/plp/whatever-url和site.com/shop/plp/whater-url?id:value可以全部转到site.com/shop/plp,而不更改url或查询字符串

我目前正在使用盖茨比和@reach/router


有没有办法不用重定向就可以实现这一点?

我可以通过实现这一点。基本上,它是内置在盖茨比中的前端解决方案,它使用pages
src/pages/foo.js
中的一个特定文件,用于匹配特定模式的所有URL

我已经有了这个特定问题的工作版本-。尝试使用
/app/..
导航到任何URL以从中获取数据-检查控制台输出。一些例子:

如果仅客户端路由正常工作,则取决于静态主机:

  • 例如,只有当我首先导航到一个静态生成的页面(比如索引
    /
    ),然后导航到
    /app
    时,它才起作用
  • 它只适用于Github页面。在考虑使用AWS S3、谷歌托管等
  • 之前进行测试。
查看这些文件:


    • 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>
          );
      }
      
      render(){
      console.log(this.props);
      返回(
      );
      }
      
      以及在呈现实际页面之前防止404页面闪烁的最后一步,与此问题相关

      在404.js中

      const browser = typeof window !== "undefined" && window;
      const NotFoundPage = () => {
      return (
          browser && (
              <div>
                  <Layout>
                      <Container>
                          <h1>404 Page</h1>
                      </Container>
                  </Layout>
              </div>
          )
      );
      };
      
      const browser=窗口类型!==“未定义”和&window;
      const NotFoundPage=()=>{
      返回(
      浏览器&&(
      404页
      )
      );
      };
      

      希望这能帮助别人

      你的问题太模糊了。没有重定向是什么意思?这不包括在内吗?Advait,这是正确的方向,谢谢,我想指出您与github repo 404的链接。除了客户端只路由需要更新的404.js之外,否则它会在渲染之前刷新404页面。呜呜!我很抱歉,它被设置为私人的。您现在可以看到代码了。这个解决方案依赖于404.js的加载——这就是为什么它不能在Zeit上工作,他们有一个自定义的404。我认为前端路由/客户端路由是这样工作的,在应用它们之前,您需要加载一些页面。在这种情况下,盖茨比必须包括所有页面上的内容,包括404.js。我在404.js中找到了与您相同的代码-它不应该闪烁。。。