我正试图找到一种方法,让一些代码在每个请求的初始页面加载时运行。我想能够识别请求域并重定向到网站的特定部分基于它。
据我所知,我可以将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
标头值,则进行重定向。
我会按照以下顺序给出解决方案:
- 在服务器上重定向(nginx或其他什么),最快的解决方案
- 您可以创建自定义[Next.js服务器][1]来处理重定向
- 正如您所说的自定义应用程序
- 每个页面中使用的RouteGuard将重定向