我在IIS中创建了一个新页面。我将物理路径连接到我的角度2应用程序源。
当我使用localhost:port
访问该页面时,我会正常访问该页面。
当我切换到其他视图时,例如localhost:port/Employees
,它最初工作正常,但是当我重新加载页面时,它会返回相同URL的HTTP-404错误。有人有这个问题吗?我认为它与angular 2路由有关。
IIS也提供此回复:
最可能的原因:Web服务器上不存在指定的目录或文件。
答案 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="/"/>