角度优先站点访问非根路径在本地有效,但不适用于生产

Jak*_*ith 1 routing bootstrapping angular

在我的Angular 4应用程序中,如果我第一次访问该站点(即localhost:4200/projects)时在URL中键入非根路径,则会引导我的应用程序,并在浏览器的屏幕上呈现正确的组件。

但是,一旦我通过IIS为站点提供服务,如果转到,则会http://<my-domain>.com/projects收到404错误(不是来自我的应用程序),并且该应用程序永远不会启动。

如何在首次访问生产环境中的站点时获得对非根目录路径的访问,以识别该应用程序是Angular应用程序,并为根目录或更高版本的任何路径引导该应用程序?

And*_*aru 5

在此处查看我的答案,以详细了解为什么会这样。简短摘要:

在您的应用程序的已部署版本上,托管它的Web服务器仅知道如何提供它所看到的一个html文件(index.html),该文件对应于您的根路径。例如,您尝试直接访问 http:// url-to-your-app / art的第二个服务器将抛出未找到的404,因为它无法识别出它可以作为资源的路径。

对于IIS,最简单的解决方法是将其添加到web.config中:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors>   
            <remove statusCode="404" subStatusCode="-1" />                
            <error statusCode="404" path="/index.html" responseMode="ExecuteURL" />                
        </httpErrors>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这样做是指示IIS每当检测到404时都用您的index.html进行响应。

另一种方法是设置URL重写,但这需要安装和配置重写模块,与上述解决方案相比,我认为这太麻烦了。