Nginx重写规则不生效,路径总是404怎么办? 东方尚斌 提问于 2026-03-07 20:41:17 阅读 31 工具 我用Nginx部署了一个前端项目,想把所有非静态资源的请求都重写到index.html,但配置了rewrite后刷新页面还是404。 我试过在location里加rewrite ^(.*)$ /index.html last;,也试过用try_files,但都不行。下面是我的配置: location / { root /usr/share/nginx/html; index index.html; rewrite ^(.*)$ /index.html last; } Nginx 我来解答 赞 5 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 书生シ玉佩 Lv1 看起来你的配置思路是对的,但有些细节可能需要调整。我来一步步解释怎么解决这个问题。 首先,你想要的效果是把所有请求都导向到index.html,这通常用try_files来做会更合适一些。rewrite虽然能实现类似效果,但在某些情况下可能会导致意外行为。 下面是经过优化后的配置示例: server { listen 80; server_name example.com; root /usr/share/nginx/html; # 这里我们定义了location / location / { # try_files指令会依次检查文件是否存在 # 如果都没找到,就返回index.html try_files $uri $uri/ /index.html; # 注意这里不需要写rewrite了 # 原理是这样的:当用户访问一个路径时 # Nginx会先检查这个路径是否存在对应的静态文件 # 如果都没有找到,就会返回最后指定的文件(index.html) } } 这段配置的关键在于try_files $uri $uri/ /index.html;: 1. $uri表示完整的请求路径,比如/user/profile 2. $uri/表示以斜杠结尾的目录形式,比如/user/profile/ 3. 最后一个参数/index.html就是当上面两个都找不到时要使用的文件 记得在修改完配置文件后,一定要reload Nginx让配置生效。可以用命令sudo nginx -s reload。 顺便说一句,很多人第一次配这种SPA(单页应用)路由的时候都会遇到404问题,因为默认情况下Nginx会直接去找对应的文件。通过这种方式,就能很好地支持前端路由了。 如果你还是遇到404,建议检查一下: - 文件权限是否正确,特别是index.html是否有读取权限 - 根目录/usr/share/nginx/html下确实有index.html文件 - 配置文件语法是否正确,可以用nginx -t命令检查 回复 点赞 2026-03-29 22:15 FSD-琳贺 Lv1 老哥你那个rewrite放错位置了,用try_files才对。试试这个配置: location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; } 搞完记得nginx -s reload。我上次也踩过这坑,熬到凌晨三点才解决... 回复 点赞 1 2026-03-07 21:00 加载更多 相关推荐 2 回答 100 浏览 Nginx重写规则不生效,总是返回404怎么办? 我用Nginx部署了一个前端项目,想把所有非静态资源的请求都重写到index.html,但配置了rewrite后刷新页面还是404。 我试过在location里加rewrite ^(.*)$ /ind... 码农怡平 工具 2026-02-23 21:50:19 2 回答 52 浏览 Nginx配置location匹配规则总是不生效怎么办? 我最近在用 Nginx 部署一个前端项目,想把所有 /api 开头的请求代理到后端服务,但不管怎么改 location 规则都没用,请求还是被当成了静态资源处理。我试过 =、~、^~ 这些前缀,也重启... ♫凌昊 工具 2026-03-19 04:20:19 1 回答 27 浏览 Nginx重写规则导致React路由404,怎么解决? 我在用React做前端,部署到Nginx后,直接访问二级路由比如 /dashboard 就报404,刷新页面就挂了。本地开发没问题,但上线后只有首页能打开。 我试过在Nginx里加 rewrite ^... Tr° 爱豪 工具 2026-03-04 05:00:22 2 回答 33 浏览 Nginx反向代理后前端请求404了怎么办? 我本地开发时 API 请求都正常,但部署到服务器用 Nginx 做反向代理后,所有接口都返回 404。Nginx 配置里 proxy_pass 写的是后端服务地址,路径也对,但就是不行。 前端代码里是... Mc.俊美 工具 2026-03-05 08:21:24 2 回答 64 浏览 高并发时Nginx缓存CSS后频繁出现404错误怎么办? 最近在优化网站性能时,我尝试在Nginx里给CSS文件设置了长缓存头,但高并发访问时404错误突然增多。已经试过调整proxy_cache_valid和expires参数,但问题依旧... 我的配置大... 诗琪 Dev 工具 2026-01-27 16:35:35 1 回答 38 浏览 Nginx 配置反向代理后前端请求 404 怎么回事? 我用 Nginx 做了反向代理,把前端打包后的静态资源部署好了,但一调后端接口就返回 404。本地 dev 时用 proxy 配置没问题,上线后就不行了。 我的前端代码里是这样发请求的: fetch(... 程序员美蓝 工具 2026-03-25 22:25:20 2 回答 32 浏览 Nginx反向代理后端接口404了怎么办? 我本地开发时用 Nginx 做反向代理,前端请求 /api/login 想转发到后端的 http://localhost:3000/login,但一直返回 404。 我的 Nginx 配置如下: lo... 西门兰兰 工具 2026-03-25 16:03:19 1 回答 31 浏览 Nginx 的 keepalive 配置到底该怎么写才生效? 我在用 Nginx 做反向代理,后端是 Node.js 服务。最近发现连接复用好像没生效,每次请求都新建 TCP 连接,延迟很高。我查了文档,在 upstream 里加了 keepalive 32;,... 迷人的心虹 工具 2026-03-14 10:10:22 2 回答 83 浏览 Nginx配置了缓存但静态文件没生效怎么办? 折腾了一下午配置Nginx缓存,但发现CSS和JS文件还是没被缓存到。明明按教程设置了proxy_cache,访问的时候检查响应头连Cache-Control都没看到,是不是哪里漏了? 我的Nginx... 一俊郝 工具 2026-02-12 07:48:52 2 回答 116 浏览 Nginx配置HTTPS后React应用无法访问静态资源怎么办? 我给React项目配置了Nginx HTTPS后,静态资源全404了。控制台提示"GET https://xxx/logo.png 404",但文件确实在build/public目录里。 React代... ___英杰 工具 2026-01-29 20:08:24
首先,你想要的效果是把所有请求都导向到index.html,这通常用try_files来做会更合适一些。rewrite虽然能实现类似效果,但在某些情况下可能会导致意外行为。
下面是经过优化后的配置示例:
这段配置的关键在于
try_files $uri $uri/ /index.html;:1.
$uri表示完整的请求路径,比如/user/profile2.
$uri/表示以斜杠结尾的目录形式,比如/user/profile/3. 最后一个参数
/index.html就是当上面两个都找不到时要使用的文件记得在修改完配置文件后,一定要reload Nginx让配置生效。可以用命令
sudo nginx -s reload。顺便说一句,很多人第一次配这种SPA(单页应用)路由的时候都会遇到404问题,因为默认情况下Nginx会直接去找对应的文件。通过这种方式,就能很好地支持前端路由了。
如果你还是遇到404,建议检查一下:
- 文件权限是否正确,特别是index.html是否有读取权限
- 根目录
/usr/share/nginx/html下确实有index.html文件- 配置文件语法是否正确,可以用
nginx -t命令检查搞完记得
nginx -s reload。我上次也踩过这坑,熬到凌晨三点才解决...