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

Middleware for each route server side in Next.js

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

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

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

有没有其他解决方案可以采用?

编辑

基本上我需要请求对象,这样我才能做这样的事情:

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

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

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

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

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

此规则将匹配任何不是 / 的路径,如果它包含所需的 host header 值,则重定向。