Nginx重写规则不生效,总是返回404怎么办? 码农怡平 提问于 2026-02-23 21:50:19 阅读 47 工具 我用Nginx部署了一个前端项目,想把所有非静态资源的请求都重写到index.html,但配置了rewrite后刷新页面还是404。 我试过在location里加rewrite ^(.*)$ /index.html last;,也试过用try_files,但都不行。这是我的配置: location / { root /usr/share/nginx/html; rewrite ^(.*)$ /index.html last; } Nginx 我来解答 赞 4 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 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 没读权限。 回复 点赞 1 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 逻辑里。 回复 点赞 3 2026-02-23 22:03 加载更多 相关推荐 2 回答 28 浏览 高并发时Nginx缓存CSS后频繁出现404错误怎么办? 最近在优化网站性能时,我尝试在Nginx里给CSS文件设置了长缓存头,但高并发访问时404错误突然增多。已经试过调整proxy_cache_valid和expires参数,但问题依旧... 我的配置大... 诗琪 Dev 工具 2026-01-27 16:35:35 2 回答 29 浏览 Nginx配置静态图片返回400 Bad Request怎么办? 大家好,我在配置Nginx静态资源时遇到个问题。我把图片放在/var/www/images目录,配置了 location /images/ { root /var/www; autoindex on;... Good“富水 工具 2026-02-14 20:30:25 1 回答 44 浏览 Nginx配置了缓存但静态文件没生效怎么办? 折腾了一下午配置Nginx缓存,但发现CSS和JS文件还是没被缓存到。明明按教程设置了proxy_cache,访问的时候检查响应头连Cache-Control都没看到,是不是哪里漏了? 我的Nginx... 一俊郝 工具 2026-02-12 07:48:52 1 回答 89 浏览 Nginx配置HTTPS后React应用无法访问静态资源怎么办? 我给React项目配置了Nginx HTTPS后,静态资源全404了。控制台提示"GET https://xxx/logo.png 404",但文件确实在build/public目录里。 React代... ___英杰 工具 2026-01-29 20:08:24 1 回答 2 浏览 Nginx反向代理后端接口时为什么一直返回502? 我用Nginx给本地开发的Node.js服务做反向代理,前端请求一发就报502 Bad Gateway,但直接访问后端端口是通的。是不是proxy_pass配置有问题? 我的Nginx配置里写了pro... Code°玉萱 工具 2026-03-02 20:21:22 1 回答 24 浏览 Nginx 配置完反向代理后页面加载空白怎么办? 我本地用 Vue 开发了一个前端项目,打包后放到 Nginx 里,想通过反向代理访问后端 API,但配置完之后页面完全空白,控制台也没报错。 我试过直接访问静态文件是正常的,但加上 proxy_pas... 长孙东宇 前端 2026-02-28 13:22:22 1 回答 19 浏览 Nginx限流后前端请求被拦,怎么处理429错误? 我用Nginx做了限流配置,结果前端频繁调用接口时直接返回429了,页面卡住没法继续操作。有没有办法在JS里捕获这个状态并友好提示用户? 试过在axios拦截器里判断status === 429,但有... UP主~焕焕 工具 2026-02-27 13:09:20 2 回答 35 浏览 Nginx代理WebSocket时连接总是断开,该怎么排查? 我用Nginx做前端页面到后端WebSocket服务器的代理,但连接一直提示"WebSocket connection to 'wss://example.com/socket' failed: Er... 一彦会 工具 2026-02-14 10:49:31 2 回答 39 浏览 Nginx配置geo封禁恶意IP时正常请求被拦截怎么办? 最近在配置Nginx服务器时,想通过geo模块封禁恶意扫描IP,但设置后正常访问也出现403了。我按网上的教程写了geo和limit_req配置,但测试时自己的IP被莫名拦截,日志显示匹配到了某个规则... 旗施~ 工具 2026-01-27 09:29:53 2 回答 40 浏览 Nginx限流配置后,为什么超过3次请求就直接被拒绝了? 我按文档配置了Nginx的限流,设置的是每秒最多5次请求(burst设了3),但测试时发现超过3次就直接返回503了。代码检查了好几遍没问题,难道是我的配置哪里理解错了? 配置片段如下(简化版):&l... 欧阳利利 工具 2026-01-26 23:44:36
正确做法是用 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 逻辑里。