IIS给出404-我的Angular 7应用程序路由上找不到文件或目录错误

时间:2019-08-08 10:38:44

标签: angular iis

我已经部署了我的有角度的应用程序,该应用程序以前可以正常运行,但是当我将应用程序的内部组件放入根模块并尝试从应用程序的顶部访问它时,会在IIS上抛出此错误。

这是我的角度路由文件:

export const routes: Routes = [
  { path: 'enable-cookies', component: EnableCookiesComponent },
  { path: 'not-found', component: NotFoundComponent },
  { path: 'lock-screen', component: LockScreenComponent, canLoad: 
    [RestrictPathGuard] },
  { path: 'booking-detail/:id/:id2', loadChildren: 
     './public/public.module#PublicModule'},
  { path: '', loadChildren: 'app/components/pages.module#PagesModule', 
    canActivate: [UserProtectionGuard] },
  { path: '**', redirectTo: 'not-found' }
  ];

在上述路线中,路径 booking-detail /:id /:id2 给我 404 错误,其他路径都可以正常工作。

我在下面的web.config中也有我的URL重写文件:

<?xml version="1.0" encoding="utf-8"?>
<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>

我有什么想念的东西吗?

下面是我要访问的网址。

http://10.1.1.1:7070/booking-detail/MTk2NnwxMDR8U0VBfEdVRVNU/Dm9duQS%2fI%2fZSLdXyQTyLVZUNRjuTxRjXhGUxecdVifZh%2fhk6cWKIH6chi5pQgr6e3HQ296gGFgRE%2fkpFoW95YgsFCWQuSdeKk79iPFi9RW1RFQfZ4Zr%2fQYZ40r0q%2bzBuDZmVrrxU39Ayn9nGP5%2fNbD7219uff8K5cwsTYkhqxNDjbfZ5SHcPiPXvdyRkDnFpXzsmNq0TjOAPIBqsRkVilmFCWI6tYCxx4brwKO7Acy1EE8TD3p9U6BS%2fZLhZikFkiAhHUKVw8ImLGhctp5TDfg3BIYHMQ7Rj4BEYnEEdpxxRP%2fgB3g%2bvRB4l8sCgJSCc4SVrQIb68lXttzfyEDLLJIzmCVdRDoCnRUqRMuJWSzXQ5m0vcvEhP1p%2bpdSp7OwJQag82YlO%2fv0lIkrSvrMih4auBjEv64%2fFJfYJ7dK%2fGOmBHuh5ET7du13kpKql7k39LrRR4BkzQS4cCswuD8PS6w%3d%3d

这是PublicModule的路由

export const routes: Routes = [
{
    path: '',
    component: PublicComponent,
    children: [
        { path: '', component: ViewBookingComponent},
    ]
}

];

3 个答案:

答案 0 :(得分:0)

替换

 <action type="Rewrite" url="./index.html" />

使用

 <action type="Rewrite" url="/" />

答案 1 :(得分:0)

我在 chrome 中遇到了同样的错误,但后来我尝试在 firefox 中打开它,实际错误是 iis 被配置为禁用双转义序列,所以我设置配置请求过滤以允许双重转义

<security>
            <requestFiltering allowDoubleEscaping="true" />
</security>

然后它就可以工作了,但请注意此解决方案将添加的 security holes

答案 2 :(得分:0)

对于 IIS,在 Web.config 中添加重写规则。

只需将 Web.config 放在应用程序的根文件夹中即可。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="AngularRewrite" 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>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

如果您不幸无法添加该 Web.config,请使用 HashLocationStrategy 作为最后的手段。

https://angular.io/api/common/HashLocationStrategy#example