在我的Angular 4应用程序中,如果我在第一次访问该站点时键入非根路径(即localhost:4200/projects
),我的应用程序将被引导并且正确的组件将呈现在屏幕上浏览器。
但是,一旦我通过IIS提供网站,如果我转到http://<my-domain>.com/projects
,我会收到404错误(不是来自我的应用程序),应用程序永远不会被引导。
如何首次访问生产中的站点以访问非根路径,以识别应用程序是Angular应用程序并为任何根路径或更远的路径引导应用程序?
答案 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重写,但这需要安装和配置重写模块,与上述解决方案相比,我认为这太麻烦了。