Next.js 如何将nextjs应用程序置于维护模式(使用Vercel)

Next.js 如何将nextjs应用程序置于维护模式(使用Vercel),next.js,serverless,vercel,Next.js,Serverless,Vercel,我刚刚使用Vercel将我的nextjs应用程序发布到生产中 我喜欢整个体验,除了一小部分:我本希望能够将我的应用程序置于维护模式,但该选项在Vercel上似乎不可用 我的问题是:以前有没有人做到过这一点,可以在这里分享一些细节 我猜这可以在两个层次上完成: 修改我的应用程序,以便在检测到环境变量(即MAINTENANCE\u MODE=true)时,每页都会重定向到维护屏幕。但是,这并不理想,因为在Vercel上添加环境变量需要考虑它的部署 具有一个简单的每个项目切换,以从Vercel启用/

我刚刚使用Vercel将我的nextjs应用程序发布到生产中

我喜欢整个体验,除了一小部分:我本希望能够将我的应用程序置于维护模式,但该选项在Vercel上似乎不可用

我的问题是:以前有没有人做到过这一点,可以在这里分享一些细节

我猜这可以在两个层次上完成:

  • 修改我的应用程序,以便在检测到环境变量(即
    MAINTENANCE\u MODE=true
    )时,每页都会重定向到维护屏幕。但是,这并不理想,因为在Vercel上添加环境变量需要考虑它的部署
  • 具有一个简单的每个项目切换,以从Vercel启用/禁用维护模式。那将是令人振奋的
“维护模式”可以通过
next.config.js
中的环境变量和属性实现(需要next.js 9.5.0或更新版本)

module.exports={
重定向(){
返回[
process.env.MAINTENANCE_模式==“1”
?{source:“/((?!maintenance.*)”,destination:“/maintenance.html”,permanent:false}
:null,
].过滤器(布尔值);
}
};
这将添加一个匹配传入请求的通配符路由,然后向
/maintenance.html
位置发出临时重定向

请注意,如果不重新部署,则无法更改部署(配置或环境变量)


旧答案 如果您没有使用Next.js或Next.js的旧版本,则可以通过
vercel.json
中的属性实现“维护模式”

{
“重定向”:[
{“source”:“/(?!maintenance.*)”,“destination”:“/maintenance.html”,“permanent”:false}
]
}

什么是“维护模式”意思?意味着每个页面都会重定向到一个静态的“维护”页面。这是一个很好的答案,非常感谢!我会尽快尝试。maintenance.html文件必须在哪里?我试着把它放在项目的根目录下,放在
pages
文件夹和
public
文件夹中。使用
vercel.json
文件重定向效果很好,但找不到该文件!您可以创建一个文件
/public/maintenance.html
。相反,如果您想使用
/pages/maintenance.js
,那么您需要将“destination”修改为
/maintenance
,因为页面的文件扩展名已被剥离。问题不是找不到文件,而是我有太多重定向,因为“/maintenance.html”与“/(.*)”模式匹配,这会导致重定向,等等。我的解决方案就是在我的应用程序中添加一个direct by route。啊,是的,它被无限重定向卡住了,因为每个路径都会匹配。我更新了
属性模式,以排除任何以
维护
开头的内容。