Angular生产环境构建后路由失效 开发环境正常无构建报错
生产环境Angular路由失效排查方向
- 服务端路由回退配置缺失
这是最高发的问题原因:Angular默认使用HTML5路径模式(PathLocationStrategy),开发环境的ng serve内置了所有路径自动回退到index.html的配置,所以访问任意子路由都能正常响应。但生产部署时需要手动在服务端配置规则:所有未匹配到静态资源的请求,全部返回项目根目录的index.html文件,否则用户直接访问子路由会出现404错误。
常见服务端配置逻辑参考:- Nginx:在server配置块中添加
try_files $uri $uri/ /index.html; - Apache:在
.htaccess文件中配置重写规则,将所有请求重定向到index.html - IIS:配置URL重写规则,匹配所有请求重写为/index.html
- Nginx:在server配置块中添加
base href配置错误
检查项目index.html中的<base href="">配置是否和实际部署路径匹配:- 如果部署在域名根路径(如
https://example.com/),配置应为<base href="/"> - 如果部署在子路径(如
https://example.com/myapp/),配置应为<base href="/myapp/">
也可以在构建时通过参数指定:ng build --prod --base-href /your/deploy/path/
- 如果部署在域名根路径(如
- 生产环境变量配置异常
结合你的路由代码,重点核对两点:- 检查
environment.prod.ts中的adminRoot参数是否和开发环境配置一致,如果值错误会导致后台模块路由前缀不匹配,无法正常访问 - 检查生产环境
isAuthGuardActive开关是否开启,如果开启后当前账号没有对应路由权限,会被AuthGuard拦截,可临时关闭该开关测试路由是否能正常访问,排除权限拦截问题
- 检查
- 大小写敏感导致惰性模块加载失败
如果你是在Windows/macOS环境开发,部署到Linux服务器,需要核对所有惰性加载的import路径大小写是否和实际文件路径完全一致:Linux文件系统大小写敏感,路径大小写不匹配会导致模块加载失败,对应路由无法访问,而开发环境因为系统大小写不敏感不会触发问题 - 可选替代方案:切换哈希路由模式
如果不想修改服务端配置,可以将路由切换为哈希模式(HashLocationStrategy),URL中会携带#前缀,无需服务端额外配置即可正常运行:
在app.module.ts的providers数组中添加:{ provide: LocationStrategy, useClass: HashLocationStrategy }
内容的提问来源于stack exchange,提问作者Lint
相关产品推荐
相关产品推荐

