javascript - 如何在不重新加载页面的情况下将服务器端重定向到其他页面并且仍然将 URL 保留在 Nextjs 应用程序中?
问题描述
我有一个[slug].js
页面将获取 API 以获取目标页面
export async function getServerSideProps({ query, res }) {
const slug = query.slug;
try {
const destination = await RoutingAPI.matchSlug(slug);
res.writeHead(302, { Location: destination });
res.end();
// return {
// redirect: {
// permanent: true,
// destination,
// },
// }
} catch (error) {
return {
notFound: true
}
}
}
如果我客户端从另一个页面重定向到 slug 页面,它可以工作并保持 URL 与 slug 相同,但它会使浏览器重新加载。如果我使用
return {
redirect: {
permanent: true,
destination,
},
}
它不会重新加载浏览器,但会将 URL 更改为目标,与 slug 不同。我该如何解决这个问题?我会很感激任何想法,谢谢
解决方案
您可以使用重写来实现此目的。从文档:
重写允许您将传入请求路径映射到不同的目标路径。
在你next.config.js
添加这个:
module.exports = {
async rewrites() {
return [
{
source: "/:slug",
destination: "/your-destination",
},
];
},
};
rewrites 是一个异步函数,它期望返回一个数组,其中包含具有源和目标属性的对象:
- source 是传入的请求路径模式。
- destination 是您要路由到的路径。
推荐阅读
- python - Python Selenium Datepicker 选择年月日
- python - Python - 使用 lxml 查找特定的 XML 元素
- visual-studio-code - 关闭除当前工作选项卡以外的所有选项卡的键盘快捷键
- python-3.x - 内外功能
- c++ - Qt Creator `Separate debug info` 是什么意思?
- python - 将函数应用于分组数据帧并将多个输出保存到数据帧中
- c - CS50 Speller 编译,但根本不运行
- css - 仅对大文本使用“宽度”属性
- javascript - JavaScript 字母替换代码,而不是替换大写?
- flutter - Flutter Provider Change Notifier 内的数据未更新