将Angular部署到IIS 7.5无法正常工作

3
"最初的回答"
我想部署我的Angular项目,但是组件丢失了。

我的步骤

步骤1:

我执行了cmd命令:

ng-build --prod

第二步:

我正在将网站添加到IIS中,路径在dist内。

第三步:

首页正常工作,但其他组件的登录页面未找到404。

http://localhost/login HTTP错误404.0 - 未找到

在文件App.Module.Ts中,我正在配置路由。

const routesConfig:Routes=
[
  {path:"kinds",component:KindsComponent},
  {path:"",component:FilmsComponent},
  {path:"films",component:FilmsComponent},
  {path:"login",component:LoginComponent},
  {path:"accounts",component:AccountsComponent},
  {path:"customers",component:CustomersComponent},
  {path:"director",component:DirectorComponent}
];

再次注意:当我构建项目并在IIS上部署时,http://localhost正常工作,但其他组件未找到。

最终解决方案:

如何使其正常工作?我犯了什么错误?

1个回答

6
您需要在IIS中创建一个重定向到index.html的规则,因为在Angular SPA中,路由是应用程序负责的,而不是服务器。请参见这里的Angular routing
例如,一旦请求http://yourdomain/index.html将被提供,并最终引导该应用程序。
但是,如果例如请求http://yourdomain/login,并且没有服务器端重定向到index.html,则服务器没有将任何资源映射到该路由,并使用404-未找到错误解决请求。
一旦您为任何会导致404-未找到错误(除了像css、图像字体这样的资产)的请求提供index.html,Angular路由器就会接管,并在引导应用程序后显示相应的视图。
以下是用于IIS的示例重写规则:

<rule name="Angular" 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="/" />
</rule>

1
最佳答案!然后为IIS安装URL重写。它正常工作! - Long Hoàng Nguyễn
2
很好的提示,但它似乎是这篇2017年文章的副本(其中包含其他非常有用的提示):https://devblogs.microsoft.com/premier-developer/tips-for-running-an-angular-app-in-iis。 - Mike Gledhill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接