Angular第一次站点访问非根路径在本地工作但不在生产中

时间:2017-08-23 15:40:29

标签: angular routing bootstrapping

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

但是,一旦我通过IIS提供网站,如果我转到http://<my-domain>.com/projects,我会收到404错误(不是来自我的应用程序),应用程序永远不会被引导。

如何首次访问生产中的站点以访问非根路径,以识别应用程序是Angular应用程序并为任何根路径或更远的路径引导应用程序?

1 个答案:

答案 0 :(得分:5)

有关发生这种情况的更详细说明,请参阅my answer here。 一个简短的片段:

  

在部署的应用版本上,托管它的网络服务器知道   只有如何提供它看到的一个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>

这样做会指示IIS在检测到404时使用index.html进行响应。

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