我们在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
上周应用程序正常运行。
我们忘了做什么?
答案 0 :(得分:24)
2020年5月-您无需在任何地方添加任何javascript文件或配置文件。让我解释一下。
我正面临着同样的问题,花了6个小时尝试一切,包括对这个问题的最受欢迎答案。虽然可以接受的答案是一个不错的解决方法(但不仅需要添加index.js文件,还需要做更多的工作),但是有比这更简单的方法。
您看到,仅部署Azure Web App(或也称为App Service)时,会发生两件事:
默认情况下,Web应用程序指向opt / startup / hostingstart.html
它还将hosthoststart.html放在home / site / wwwroot
在部署代码时,它将替换home / site / wwwroot中的hostingstart.html,但应用程序仍指向opt / startup / hostingstart.html。如果要验证这一点,请尝试删除opt / startup / hostingstart.html文件,然后您的网络应用将抛出“ CANNOT GET /”错误。
那么如何更改默认指针?它比看起来简单:
转到网络应用上的“配置”标签,然后将以下代码添加到启动脚本中:
pm2 serve /home/site/wwwroot --no-daemon
如果此Web应用程序是客户端单页应用程序,并且您在路由方面遇到问题,则将--spa添加到上述命令中,如下所示:
pm2 serve /home/site/wwwroot --no-daemon --spa
这将告诉Web应用提供wwwroot文件夹。就是这样。
图片供参考: Screenshot explaination
PS:如果仅设置启动脚本而不部署代码,它将仍然显示hostingstart.html,因为默认情况下该文件位于wwwroot文件夹中。
答案 1 :(得分:3)
好吧,你会喜欢这个。今天我也发生了这种情况。完全一样。 我很确定,天青团队在某个地方拨了一个开关,我们就跌入了裂缝。
我发现这个含糊不清的答案,没有投票,而且成功了(花了一些额外的精力)
奖励!这也解决了我仅在已部署站点(而非本地站点)上遇到的路由器问题:
信用:@stormwild:http://tempuri.org/:GetAllProductResult
从@stormwild的帖子中看到: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies
步骤:
使用以下代码在其中创建index.js:
var express = require('express');
var server = express();
var options = {
index:'index.html'
};
server.use('/',express.static('/ home / site / wwwroot',options));
注意:确保在此文件夹中也运行npm install --save express,否则您的应用程序服务将在启动时崩溃
如果没有自动重启应用程序服务,请确保
答案 2 :(得分:2)
另一种解决方案是在index.html文件旁边添加一个名为 ecoysystem.config.js 的文件。
module.exports = {
apps: [
{
script: "npx serve -s"
}
]
};
这将告诉pm2在您的应用程序服务启动时将所有请求关联到index.html。
此处非常有用的信息:https://burkeholland.github.io/posts/static-site-azure/
答案 3 :(得分:0)