Nginx重写规则不生效,总是返回404怎么办? 码农怡平 提问于 2026-02-23 21:50:19 阅读 95 工具 我用Nginx部署了一个前端项目,想把所有非静态资源的请求都重写到index.html,但配置了rewrite后刷新页面还是404。 我试过在location里加rewrite ^(.*)$ /index.html last;,也试过用try_files,但都不行。这是我的配置: location / { root /usr/share/nginx/html; rewrite ^(.*)$ /index.html last; } Nginx 我来解答 赞 10 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 UI子骞 Lv1 你这个配置有个致命问题:rewrite 会把所有请求(包括 /api、/favicon.ico、/static/xxx.js 这些)都重写到 index.html,但 Nginx 在 rewrite 后还会继续处理,而 /index.html 本身又匹配当前 location,导致死循环或者提前终止,最终返回 404。 正确做法是用 try_files,而且要先判断静态文件是否存在,不存在再回退到 index.html,比如这样: location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; } 注意: - $uri 是当前请求的文件路径,Nginx 会优先找这个真实文件 - 如果文件不存在(比如 /user/123 这种前端路由),再走 /index.html - 千万别用无条件 rewrite,容易被恶意路径绕过,比如 /../../etc/passwd 这类注入,try_files 会自动做路径安全校验,防止注入 另外检查下 index.html 是否真的在 /usr/share/nginx/html 下,权限是不是 644,目录是不是 755,有时候问题出在文件根本没放对位置或者 Nginx 没读权限。 回复 点赞 3 2026-02-24 03:03 Good“庆玲 Lv1 你这个配置的问题在于 rewrite 的位置不对,而且规则太宽泛了。 官方文档里说,rewrite 如果放在 location 根块里,会先于 try_files 执行,但你这里没加 try_files,而且所有请求(包括 /api/xxx 这种)都被重写了,静态资源也可能被干扰。 正确做法是:先尝试找真实文件,找不到再回退到 index.html,用 try_files 就行,不用 rewrite。 location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; } 注意: - $uri 是当前请求的文件路径,比如 /about - $uri/ 是加上斜杠后的目录路径(比如 /about/) - 如果这两个都不存在,就返回 /index.html,让前端路由接管 别再用 rewrite ^(.*)$ /index.html last; 这种通杀规则了,容易把自己绕进去。 如果你确实有 API 接口要单独处理,记得把 location /api/ 单独拎出来,别让它进这个 fallback 逻辑里。 回复 点赞 5 2026-02-23 22:03 加载更多 相关推荐 2 回答 28 浏览 Nginx重写规则不生效,路径总是404怎么办? 我用Nginx部署了一个前端项目,想把所有非静态资源的请求都重写到index.html,但配置了rewrite后刷新页面还是404。 我试过在location里加rewrite ^(.*)$ /ind... 东方尚斌 工具 2026-03-07 20:41:17 2 回答 52 浏览 Nginx配置location匹配规则总是不生效怎么办? 我最近在用 Nginx 部署一个前端项目,想把所有 /api 开头的请求代理到后端服务,但不管怎么改 location 规则都没用,请求还是被当成了静态资源处理。我试过 =、~、^~ 这些前缀,也重启... ♫凌昊 工具 2026-03-19 04:20:19 2 回答 31 浏览 Nginx反向代理后前端请求404了怎么办? 我本地开发时 API 请求都正常,但部署到服务器用 Nginx 做反向代理后,所有接口都返回 404。Nginx 配置里 proxy_pass 写的是后端服务地址,路径也对,但就是不行。 前端代码里是... Mc.俊美 工具 2026-03-05 08:21:24 1 回答 25 浏览 Nginx重写规则导致React路由404,怎么解决? 我在用React做前端,部署到Nginx后,直接访问二级路由比如 /dashboard 就报404,刷新页面就挂了。本地开发没问题,但上线后只有首页能打开。 我试过在Nginx里加 rewrite ^... Tr° 爱豪 工具 2026-03-04 05:00:22 1 回答 36 浏览 Nginx 配置反向代理后前端请求 404 怎么回事? 我用 Nginx 做了反向代理,把前端打包后的静态资源部署好了,但一调后端接口就返回 404。本地 dev 时用 proxy 配置没问题,上线后就不行了。 我的前端代码里是这样发请求的: fetch(... 程序员美蓝 工具 2026-03-25 22:25:20 2 回答 61 浏览 高并发时Nginx缓存CSS后频繁出现404错误怎么办? 最近在优化网站性能时,我尝试在Nginx里给CSS文件设置了长缓存头,但高并发访问时404错误突然增多。已经试过调整proxy_cache_valid和expires参数,但问题依旧... 我的配置大... 诗琪 Dev 工具 2026-01-27 16:35:35 2 回答 30 浏览 Nginx反向代理后端接口404了怎么办? 我本地开发时用 Nginx 做反向代理,前端请求 /api/login 想转发到后端的 http://localhost:3000/login,但一直返回 404。 我的 Nginx 配置如下: lo... 西门兰兰 工具 2026-03-25 16:03:19 1 回答 29 浏览 Nginx 的 keepalive 配置到底该怎么写才生效? 我在用 Nginx 做反向代理,后端是 Node.js 服务。最近发现连接复用好像没生效,每次请求都新建 TCP 连接,延迟很高。我查了文档,在 upstream 里加了 keepalive 32;,... 迷人的心虹 工具 2026-03-14 10:10:22 2 回答 59 浏览 Nginx配置静态图片返回400 Bad Request怎么办? 大家好,我在配置Nginx静态资源时遇到个问题。我把图片放在/var/www/images目录,配置了 location /images/ { root /var/www; autoindex on;... Good“富水 工具 2026-02-14 20:30:25 2 回答 83 浏览 Nginx配置了缓存但静态文件没生效怎么办? 折腾了一下午配置Nginx缓存,但发现CSS和JS文件还是没被缓存到。明明按教程设置了proxy_cache,访问的时候检查响应头连Cache-Control都没看到,是不是哪里漏了? 我的Nginx... 一俊郝 工具 2026-02-12 07:48:52
正确做法是用 try_files,而且要先判断静态文件是否存在,不存在再回退到 index.html,比如这样:
注意:
- $uri 是当前请求的文件路径,Nginx 会优先找这个真实文件
- 如果文件不存在(比如 /user/123 这种前端路由),再走 /index.html
- 千万别用无条件 rewrite,容易被恶意路径绕过,比如 /../../etc/passwd 这类注入,try_files 会自动做路径安全校验,防止注入
另外检查下 index.html 是否真的在 /usr/share/nginx/html 下,权限是不是 644,目录是不是 755,有时候问题出在文件根本没放对位置或者 Nginx 没读权限。
官方文档里说,rewrite 如果放在 location 根块里,会先于 try_files 执行,但你这里没加 try_files,而且所有请求(包括 /api/xxx 这种)都被重写了,静态资源也可能被干扰。
正确做法是:先尝试找真实文件,找不到再回退到 index.html,用 try_files 就行,不用 rewrite。
注意:
- $uri 是当前请求的文件路径,比如 /about
- $uri/ 是加上斜杠后的目录路径(比如 /about/)
- 如果这两个都不存在,就返回 /index.html,让前端路由接管
别再用
rewrite ^(.*)$ /index.html last;这种通杀规则了,容易把自己绕进去。如果你确实有 API 接口要单独处理,记得把
location /api/单独拎出来,别让它进这个 fallback 逻辑里。