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: "/"
}
}
}
我会按以下顺序给出解决方案:
- 在您的服务器上进行重定向(nginx 或其他),最快的解决方案
- 您可以创建自定义 [Next.js 服务器][1] 来处理重定向
- 如你所说自定义应用程序
- 在每个会重定向的页面中使用 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 值,则重定向。
我正在尝试找出一种方法,在每个请求的初始页面加载时使用一些代码 运行。我希望能够识别请求域并基于它重定向到网站的特定部分。
据我所知,我可以将 getInitialProps
添加到自定义 _app
页面,但这会禁用下一步的所有优化。另外 _app
似乎不支持 getServerSideProps
,我认为这是一个替代方案。
我考虑过的另一种方法是在网站的每个页面中都有 getServerSideProps
我必须做的检查,但这会使每个页面在服务器端为每个新请求重新呈现,禁用即使是纯静态页面也会在构建时呈现。
有没有其他解决方案可以采用?
编辑
基本上我需要请求对象,这样我才能做这样的事情:
export const getServerSideProps: GetServerSideProps = async ({
req
}) => {
if (req.headers.host === 'something') {
return {
redirect: {
permanent: false,
destination: "/"
}
}
}
我会按以下顺序给出解决方案:
- 在您的服务器上进行重定向(nginx 或其他),最快的解决方案
- 您可以创建自定义 [Next.js 服务器][1] 来处理重定向
- 如你所说自定义应用程序
- 在每个会重定向的页面中使用 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 值,则重定向。