重新加载时找不到在iis上运行的Angular 2应用程序

时间:2017-08-21 11:25:40

标签: angular typescript iis routing iis-express

我在IIS中创建了一个新页面。我将物理路径连接到我的角度2应用程序源。

当我使用localhost:port访问该页面时,我会正常访问该页面。

当我切换到其他视图时,例如localhost:port/Employees,它最初工作正常,但是当我重新加载页面时,它会返回相同URL的HTTP-404错误。有人有这个问题吗?我认为它与angular 2路由有关。

IIS也提供此回复:

  

最可能的原因:Web服务器上不存在指定的目录或文件。

3 个答案:

答案 0 :(得分:1)

角度路由不是问题。这是必须在服务器端处理的事情。进行刷新时,服务器应重定向到基本路径。

  

默认情况下,Angular 2应用程序不会在网址上使用哈希(#)前缀,   这样做的结果是,如果你试图直接导航到深   链接在您的角度应用程序或刷新内部页面,您可能会得到404   页面未找到错误。这是因为Web服务器接收到的   请求查找与服务器上的完整URL匹配的资源,   由于url的角部分指的是a,因此不存在   你的角度应用中的路线,需要在   客户端浏览器。

在Angular中可以使用HashLocationStrategy

@NgModule({
    declarations: [AppComponent],
    imports: [BrowserModule],
    providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}],
    bootstrap: [AppComponent],
})

Angular 2 + IIS - 网址重写规则以防止页面刷新后出现404错误

  

解决此问题的方法是将所有虚拟网址重写为主网址   Angular 2 index.html文件。

<rewrite>
  <rules>
    <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>
  </rules>
</rewrite>

答案 1 :(得分:0)

尝试设置index.html

<head></head>标记中的

<base href="./" /> or  <base href="/" />

webconfig文件中的设置将您的index.html设为default page

希望它对你有帮助!!

答案 2 :(得分:0)

如果您没有在网址中使用哈希,则需要您的服务器来处理它。如果找不到请求的页面,您的服务器需要回退到inndex.html。你也不知道

<base href="/"/>