本文最后更新于 2026年4月13日。
这种情况在前端框架(如 Vue 或 React)部署时非常经典。简单来说:Cloudflare Pages 等平台会自动帮你处理单页应用(SPA)的路由重定向,而 Lucky 或普通的 Nginx/Caddy 服务器默认不会。
所以刷新一下界面也会变成404.
核心原因:前端路由与后端路由的冲突
Vue-Admin 通常使用 HTML5 History 模式。这种模式下的 URL 看起来很自然(如 /admin),但实际上服务器上并没有一个叫 admin 的文件夹或文件。
-
在开发环境或 CF 中: 当你访问
/admin时,托管平台发现找不到这个物理文件,会自动将请求重定向到index.html。Vue Router 加载后,会解析当前的 URL 路径并显示正确的组件。 -
在 Lucky/静态服务器中: 当你访问
/admin时,服务器会去根目录寻找一个名为admin的文件或目录。因为它不存在,服务器直接返回了标准的 404 Not Found。
解决方案
你需要配置 Lucky(或者 Lucky 后端的反向代理/静态服务部分),将所有找不到物理文件的请求统统指向 index.html。
1. 如果你使用的是 Lucky 的“静态资源服务”
目前我没有找到解决办法,lucky不支持nginx的语法。
我尝试添加
try_files $uri $uri/ /index.html;
保存报错
修改Web服务规则出错 : 则 Nginx Conf error:不支持的指令: try_files
我换成了nginx。
2. 检查 Nginx 配置(如果 Lucky 只是转发)
如果你在 Lucky 前面或后面还挂了一个 Nginx,确保你的 location 配置里包含 try_files:
Nginx
location / {
root /your/path/to/web/dist;
index index.html index.htm;
# 关键配置:尝试寻找资源,找不到就转交给 index.html
try_files $uri $uri/ /index.html;
}
为什么首页正常?
这通常是因为:
-
你可能是从首页点击跳转过去的: 如果你先访问根路径
/(加载了 JS),再通过页面内的按钮跳转到翻译页,这是内存里的路由切换,不经过服务器,所以正常。 -
刷新即死: 如果你在“翻译界面”直接按 F5 刷新,大概率也会出现 404。