Nginx用try_files /index.html实现零跳转维护页:将静态index.html置于root目录,修改location中try_files为$uri $uri/ /index.html,确保所有请求返回该页且状态码200。

直接用一个静态 index.html 就能做维护页面,不需要后端、不依赖数据库,关键是把它放到正确位置、配对 Web 服务器规则,并确保它真能拦截所有请求。
怎么写一个可用的维护页面 HTML
维护页本质是纯前端展示,核心要求是:语义清晰、自适应、无外部依赖。常见错误是加了 JS 加载逻辑、引用了 CDN 上的 CSS/字体,或用了相对路径的图片导致 404。
- 用
<meta charset="UTF-8">和<meta name="viewport" content="width=device-width, initial-scale=1.0">确保中文和移动端正常渲染 - 避免任何外部资源:CSS 写在
<style>里,图片用 base64 或绝对 URL(推荐 OSS/CDN 地址),不要用./images/maintain.png - 标题写清楚,比如
<title>网站维护中</title>,别留空或写成“首页” - body 内容简洁,例如:
<div style="text-align:center;padding:2rem;"><h2>系统升级中</h2><p>预计恢复时间:2026年4月18日 10:00</p></div>
Apache 下怎么让所有请求都显示这个 index.html
Apache 默认只在 403/404 时 fallback 到 ErrorDocument,但维护期间你要的是「所有路径都返回这个页面」,得靠 RewriteRule 强制覆盖。
- 编辑
/etc/httpd/conf/httpd.conf或站点配置文件,在<VirtualHost>块内添加: RewriteEngine On-
RewriteCond %{REQUEST_URI} !^/index\.html$(排除自身,避免死循环) -
RewriteRule ^(.*)$ /index.html [R=302,L](临时跳转,上线后改 302 为 200 更稳妥) - 重启 Apache:
systemctl restart httpd - 注意:如果开了 HTTPS,也要在
<VirtualHost *:443>里重复配置
Nginx 下更推荐用 try_files 实现零跳转
Apache 的重定向会暴露真实路径、增加一次 HTTP 往返;Nginx 的 try_files 是内部重写,更快也更干净。
立即学习“前端免费学习笔记(深入)”;
- 在
location /块里把原try_files $uri $uri/ =404改成: try_files $uri $uri/ /index.html;- 确保你的
index.html在 Nginx 根目录下,比如/usr/share/nginx/html/index.html - 如果原站是 SPA(如 Vue/React),这条规则本就存在,只需替换掉原来的
index.html文件即可 - reload 配置:
nginx -s reload,不用 restart
怎么验证维护页真的生效了
很多人改完配置就以为 OK,结果发现 /api/login 还在返回 JSON,或者 /static/css/app.css 仍能访问——说明没拦全。
- 打开浏览器开发者工具,访问任意路径(比如
/nonexistent-path、/api/v1/status),看 Network 面板的 Response 是否全是那个维护页的 HTML,且状态码是 200(不是 302 跳转) - curl 测试:
curl -I https://yoursite.com/api/health,确认返回Content-Type: text/html,而不是application/json - 特别注意:如果后端服务(如 Django、Node.js)本身还在运行,它可能绕过 Nginx/Apache 直接响应,此时要关掉应用进程或调整反向代理规则
最常被忽略的一点:维护页上线后,记得关掉搜索引擎抓取——在 <head> 里加 <meta name="robots" content="noindex, nofollow">,否则 Google 可能把这个页面当首页索引了。


















