【问题标题】:Angular first site visit non-root path works locally but not in productionAngular 首次站点访问非根路径在本地有效,但在生产环境中无效
【发布时间】:2018-02-01 07:15:28
【问题描述】:

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

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

我如何在第一次访问生产中的站点时访问非根路径,以识别应用程序是 Angular 应用程序并引导应用程序访问任何根路径或更高路径?

【问题讨论】:

    标签: angular routing bootstrapping


    【解决方案1】:

    请参阅my answer here 以更详细地了解为什么会发生这种情况。 一个简短的 sn-p:

    在应用的部署版本上,托管它的网络服务器知道 仅如何提供它看到的一个 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 重写,但这需要安装和配置重写模块,与上述解决方案相比,我认为这太麻烦了。

    【讨论】:

    • 你知道如何让它在 Flask Web 服务器上工作吗?我尝试添加一个 @application.errorhandler(Exception) 端点以重定向到 index.html,但是当我将应用程序部署到 AWS 时问题仍然存在 - 仍然得到 404。
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2020-06-22
    • 2021-10-22
    • 2021-11-08
    • 2014-08-21
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多