我的问题是,我正在建立一个新的网站,在我的旧的有一些页面与子路由/饲料。
举例来说:www.mypage.com/blogs/blog-1/feed
所以,我试图做的是从 /blogs/blog-1/feed 重定向到 /blogs/blog-1,但现在它显示一个404错误。
这些博客页面是动态的,它们在一个[slug].tsx文件中,所以我尝试创建一个[. slug].tsx文件,但是因为我使用了getStaticPaths和getStaticProps方法,所以它不起作用(或者我不知道如何正确地做)。
所以,我的另一个选择,也是我认为最合适的选择,是在next.config.js上添加某种重定向正则表达式:
{
source: '/blogs/:slug(/\feed/)',
destination: '/blogs/:slug',
permanent: true,
},
我说得对吗,还有更好的办法吗?因为很明显我放进去的代码不起作用,我没有告诉配置文件如何从:slug中删除'/feed'片段。
提前感谢:)
1条答案
按热度按时间trnvg8h31#
如果路由的第一部分在新旧站点之间不同,则需要
next.config.js
中的路径匹配选项,当前文档如下引用文档:
要匹配路径,可以在参数后使用
*
,例如/blog/:slug*
将匹配/blog/a/b/c/d/hello-world
但是您的新旧路由开始是相同的,
/blogs
,所以在您的next.config.js
中重定向对我来说似乎没有必要。您应该在文件的实际名称中使用
[...slug].tsx
语法,以匹配/blogs
之后的任何内容-这在此处有文档说明在这种情况下,您的页面应该位于
/pages/blogs/[...slug].tsx
。这将匹配对/blogs/blog-1
或/blogs/blog-1/feed
的请求,并在getStaticProps
中提供["blog-1"]
或["blog-1","feed"]
作为slug
参数-使用JavaScript而不是typescript,如下所示:这将传递一个属性
foo
,其值为字符串bar
到您的主页面函数:注意,使用
[...slug].tsx
语法将导致一个数组(["blog-1"]
)被传递到页面,而[slug].tsx
将传递一个字符串("blog-1"
)。这听起来不像,但您可能还想看看看起来像
[[...slug]].tsx
的可选捕获所有段。