You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署到Linux服务器后Angular仅根URL可访问,子URL无法找到

解决Angular部署后仅根URL可访问的问题

问题根源

Angular是单页应用(SPA),前端路由由框架自身处理。当直接访问子URL时,http-server会尝试在服务器上查找对应路径的静态文件,找不到就返回404,不会自动将请求转发到index.html,导致子路由无法正常加载。

解决方案

修改Dockerfile中的http-server启动命令,添加重定向参数,同时确保构建产物被正确复制到容器中:

修改后的Dockerfile

# Use an official Node.js runtime as the base image
FROM node:lts
# Set the working directory inside the container
WORKDIR /var/www/html/

# 复制Angular构建后的静态文件(替换your-app-name为你的项目名称)
COPY ./dist/your-app-name /var/www/html/

# Expose the port that the Angular app will run on
EXPOSE 9095

# 添加-P参数,将所有404请求重定向到index.html
CMD ["npx", "http-server", "-p", "9095", "-P", "/"]

关键说明

  • -P / 参数:让http-server将所有找不到资源的请求重定向到根路径的index.html,这样Angular的路由就能接管请求,正确渲染对应子页面。
  • 必须取消COPY命令的注释:ng build --configuration=dev会生成dist/your-app-name目录(your-app-name对应你angular.json中的项目名称),需要把该目录下的所有文件复制到容器工作目录,否则服务器没有静态文件可提供。

额外检查

确认Angular路由配置使用默认的PathLocationStrategy(无需额外配置,默认启用),如果手动改成HashLocationStrategy,虽然不会出现此问题,但URL会带有#号,可根据需求选择。

内容的提问来源于stack exchange,提问作者Faizan Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:47:06