Next.js中每个路由服务器端的中间件



我正试图找到一种方法,让一些代码在每个请求的初始页面加载时运行。我想能够识别请求域并重定向到网站的特定部分基于它。

据我所知,我可以将getInitialProps添加到自定义_app页面,但这将从下一步起禁用所有优化。此外,_app似乎不支持getServerSideProps,我认为这是一种替代方案。

我考虑的另一种方法是在网站的每个页面中设置getServerSideProps,并进行检查,但这会使每个页面在服务器端为每个新请求重新呈现,即使是纯静态页面,也会在构建时禁用呈现。

我能采取其他解决方案吗?

编辑

基本上我需要请求对象,这样我就可以做这样的事情:

export const getServerSideProps: GetServerSideProps = async ({
req
}) => {
if (req.headers.host === 'something') {
return {
redirect: {
permanent: false,
destination: "/"
}
}
}

您可以在next.config.js文件中使用Next.jsredirects

module.exports = {
async redirects() {
return [
{
source: '/(.+)',
has: [
{
type: 'header',
key: 'host',
value: 'something'
}
],
permanent: false,
destination: '/'
}
]
}
}

此规则将匹配任何非/的路径,如果它包含所需的host标头值,则进行重定向。

我会按照以下顺序给出解决方案:

  1. 在服务器上重定向(nginx或其他什么),最快的解决方案
  2. 您可以创建自定义[Next.js服务器][1]来处理重定向
  3. 正如您所说的自定义应用程序
  4. 每个页面中使用的RouteGuard将重定向

最新更新