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

Angular 12部署后直接访问URL出现404的问题求助

Angular部署后直接访问URL出现404的原因及解决方法

问题原因

Angular默认使用HTML5模式路由(PathLocationStrategy),这种模式的特点是:

  • 站内导航时,Angular的前端路由系统会拦截URL变化,不会向服务器发送新请求,直接渲染对应组件,所以一切正常。
  • 直接访问URL或刷新页面时,浏览器会直接向服务器发送对应路径的请求,但服务器上没有匹配该路径的物理文件或后端路由,因此返回404错误。

另外你的代码里存在两处需要修正的问题:

  1. 路由跳转语法错误:当前this.router.navigate(['guest/user' + id])会生成类似guest/user651的错误路径,正确写法应为:
this.router.navigate(['guest/user', id], navigationExtras);
// 或者明确拼接路径
this.router.navigate(['/guest/user/' + id], navigationExtras);
  1. 路由配置冗余冲突:app-routing.module.ts中guest路由下的{ path: 'user', loadChildren: ... }可以删除,因为guest-routing.module.ts里已经配置了user/:id的子路由,保留会导致路由匹配异常。

解决方法

方案1:配置服务器重写规则(推荐,保留HTML5模式)

需要在服务器端配置,将所有请求重定向到Angular的入口文件index.html,让Angular路由系统处理路径。

Nginx 配置

在你的Nginx站点配置中添加如下规则:

location / {
  try_files $uri $uri/ /index.html;
}

该规则会让Nginx优先尝试访问请求的文件/目录,找不到则返回index.html,交由Angular处理路由。

Apache 配置

在项目根目录创建或修改.htaccess文件,添加:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]

IIS 配置

在项目根目录的web.config中添加重写规则:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Angular Routes" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="/index.html" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

方案2:切换到Hash模式(无需修改服务器)

如果无法修改服务器配置,可以改用Angular的HashLocationStrategy,URL会带上#(如https://www.project.com/#/guest/user/651),这种模式下服务器只会处理#之前的路径,不会返回404。

修改app-routing.module.ts的路由配置:

@NgModule({
  imports: [
    RouterModule.forRoot(routes, { useHash: true }) // 启用Hash模式
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

该方法操作简单,但URL会带有#,对SEO有一定影响,适合快速测试或受限环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:25:20