无法获取index.html Azure Linux Web App

inv*_*mer 5 azure reactjs azure-web-app-service

我们在Microsoft Azure中创建了一个Linux Web App。该应用程序是用React(HTML和Javascript)静态编写的。我们将代码复制到了wwwroot文件夹中,但是该应用程序仅仅显示hostingstart.html,并且当我们尝试获取页面index.html时出现以下错误: Cannot GET /index.html

我们尝试在GitHub(https://github.com/Azure-Samples/html-docs-hello-world)中使用Azure的示例,但错误是相同的。网址是这样的:https//consoleadmin.azurewebsites.net/index.html

上周,应用程序运行正常。

我们忘了做什么?

Dei*_*ior 39

20205 月- 您无需在任何地方添加任何 javascript 文件或配置文件。让我解释。

我面临着完全相同的问题,浪费了 6 个小时尝试一切,包括对这个问题最流行的答案。虽然接受的答案是一个不错的解决方法(但需要做的工作不仅仅是添加 index.js 文件),但还有比这更简单的方法。

您会看到,当您仅部署 Azure Web 应用程序(或也称为应用服务)时,会发生两件事:

  1. Web 应用程序默认指向 opt/startup/hostingstart.html

  2. 它还在 home/site/wwwroot 中放置了一个 hostsstart.html

当您部署代码时,它会替换 home/site/wwwroot 中的 hostsstart.html,但该应用程序仍指向 opt/startup/hostingstart.html。如果您想验证这一点,请尝试删除 opt/startup/hostingstart.html 文件,您的 Web 应用程序将抛出“无法获取/”错误。

那么如何更改默认指针呢?它比看起来更简单:

转到 Web 应用程序上的“配置”选项卡,并将以下代码添加到启动脚本中:

pm2 serve /home/site/wwwroot --no-daemon
Run Code Online (Sandbox Code Playgroud)

如果此 Web 应用程序是客户端单页应用程序并且您遇到路由问题,则将 --spa 添加到上述命令中,如下所示:

pm2 serve /home/site/wwwroot --no-daemon --spa
Run Code Online (Sandbox Code Playgroud)

这将告诉 Web 应用程序提供 wwwroot 文件夹。就是这样。

参考图片: 截图说明

PS:如果你只设置启动脚本而不部署你的代码,它仍然会显示hostingstart.html,因为默认情况下该文件位于wwwroot文件夹中。

  • 这种方法很有帮助,但我无法让 pm2 使用 gatsby 提供所有生成的目录和文件。Gatsby 使用 React SSR 生成静态文件和文件夹。当使用“pm2服务/home/site/wwwroot”时,SPA运行正常,但是当导航(在应用程序内(而不是SPA))到/dir/dir然后点击后退按钮或刷新时,我得到一个“抱歉,请与站点管理员检查是否有错误:EISDIR ..”错误,因此它不会提供除 index.html 之外的任何内容。 (2认同)
  • 我还通过使用空启动命令更改为 PHP 堆栈来解决这个问题。 (2认同)

小智 7

好吧,你会喜欢这个。今天我也发生了这种情况。完全一样。我很确定,天青团队在某个地方拨了一个开关,我们就跌入了裂缝。

我发现这个晦涩的答案没有选票,而且确实成功了(有一些额外的麻烦)

奖金!这也解决了我仅在已部署站点(而非本地站点)上遇到的路由器问题:

信用:@stormwild:默认文档不在Azure托管的节点Web应用程序上提供

从@stormwild的帖子中看到这里:https ://blogs.msdn.microsoft.com/waws/2017/09/08/things-you-should-know-web-apps-and-linux/#NodeHome

脚步:

  1. 转到您的azure门户,选择您的应用程序服务并启动ssh
  2. 项目清单
  3. 在ssh终端中,通过命令行导航到/ home / site / wwwroot
  4. 使用以下代码在其中创建index.js:

    var express = require('express');

    var服务器= express();

    var options = {

    索引:“ index.html”

    };

    server.use('/',express.static('/ home / site / wwwroot',options));

  5. 注意:请确保也在此文件夹中运行npm install --save express,否则您的应用程序服务将在启动时崩溃

  6. 如果没有自动重启应用程序服务,请确保它不会自动重启