"Page Not Found" 尝试访问部署在 Netlify 上的站点时

"Page Not Found" when trying to access a site deployed on Netlify

我是 运行 静态 blogdown 站点并将其部署在 Netlify 上。我在 GitHub 上提供源文件,Hugo 构建站点,Netlify 部署它。

Netlify 报告该站点处于活动状态(底部包含部署日志),但是当我尝试查看我的站点时,我看到的只是一条 Netlify 错误消息:

Page Not found

Looks like you've followed a broken link or entered a URL that doesn't exist on this site.

← Back to our site

可能是什么原因?


我的 GitHub 回购:https://github.com/taraskaduk/taraskaduk

我的 URL 站点应该在:https://taraskaduk.com/

我的部署设置:

Repository: https://github.com/taraskaduk/taraskaduk
Build command: hugo
Publish directory: public
Production branch: master
Branch deploys: Deploy only the production branch and its deploy previews
Public deploy logs: Logs are public

Hugo 版本(我尝试了不同的版本)

HUGO_VERSION 0.37.1

我最近的部署日志:

9:56:27 PM: Build ready to start
9:56:28 PM: Fetching cached dependencies
9:56:29 PM: Starting to download cache of 172.4MB
9:56:30 PM: Finished downloading cache in 1.74774892s
9:56:30 PM: Starting to extract cache
9:56:33 PM: Finished extracting cache in 2.59393707s
9:56:33 PM: Finished fetching cache in 4.428746301s
9:56:33 PM: Starting to prepare the repo for build
9:56:33 PM: Preparing Git Reference refs/heads/master
9:56:34 PM: Starting build script
9:56:34 PM: Installing dependencies
9:56:35 PM: Started restoring cached node version
9:56:37 PM: Finished restoring cached node version
9:56:37 PM: v8.11.2 is already installed.
9:56:38 PM: Now using node v8.11.2 (npm v5.6.0)
9:56:38 PM: Attempting ruby version 2.3.6, read from environment
9:56:39 PM: Using ruby version 2.3.6
9:56:39 PM: Using PHP version 5.6
9:56:39 PM: Installing Hugo 0.37.1
9:56:39 PM: Started restoring cached go cache
9:56:39 PM: Finished restoring cached go cache
9:56:39 PM: unset GOOS;
9:56:39 PM: unset GOARCH;
9:56:39 PM: export GOROOT='/opt/buildhome/.gimme/versions/go1.10.linux.amd64';
9:56:39 PM: export PATH="/opt/buildhome/.gimme/versions/go1.10.linux.amd64/bin:${PATH}";
9:56:39 PM: go version >&2;
9:56:39 PM: export GIMME_ENV='/opt/buildhome/.gimme/env/go1.10.linux.amd64.env';
9:56:39 PM: go version go1.10 linux/amd64
9:56:39 PM: Installing missing commands
9:56:40 PM: Verify run directory
9:56:40 PM: Executing user command: hugo
9:56:40 PM: Building sites …
9:56:40 PM: 
9:56:40 PM:                    | EN
9:56:40 PM: +------------------+----+
9:56:40 PM:   Pages            |  6
9:56:40 PM:   Paginator pages  |  0
9:56:40 PM:   Non-page files   | 49
9:56:40 PM:   Static files     | 39
9:56:40 PM:   Processed images |  0
9:56:40 PM:   Aliases          |  4
9:56:40 PM:   Sitemaps         |  1
9:56:40 PM:   Cleaned          |  0
9:56:40 PM: Total in 522 ms
9:56:40 PM: Caching artifacts
9:56:40 PM: Started saving pip cache
9:56:40 PM: Finished saving pip cache
9:56:40 PM: Started saving emacs cask dependencies
9:56:40 PM: Finished saving emacs cask dependencies
9:56:40 PM: Started saving maven dependencies
9:56:40 PM: Finished saving maven dependencies
9:56:40 PM: Started saving boot dependencies
9:56:40 PM: Finished saving boot dependencies
9:56:40 PM: Started saving go dependencies
9:56:40 PM: Finished saving go dependencies
9:56:40 PM: Build script success
9:56:40 PM: Starting to deploy site from 'public'
9:56:41 PM: Starting post processing
9:56:41 PM: Post processing done
9:56:41 PM: Site is live

免责声明:我在支持团队@Netlify 工作

始终允许就此类问题联系 Netlify 支持人员,但我们只能真正帮助您调试我们的构建过程与您本地的不同之处,而不是调试您的源代码。让我扩展评论者提出的一些最佳实践,并提供一些建议来帮助您进一步调试不明显的问题。

首先,按照建议(感谢@aosmith!)BaseURL 应设置为 / - 这是最佳做法,可以让您的网站在本地运行(http://localhost) but also on Netlify - via http, https, deploy previews,最后在其他托管服务提供商上,同时代理等等等等。就去做吧:)

其次,您不仅可以在 _redirects 文件中进行重定向,还可以在 netlify.toml 中进行重定向,但我也不认为这是这里的问题。

当您在主 URL 处收到 404 时,这意味着您没有 /index.html 。根本原因是什么,我不知道(尽管我可以说当你的主题丢失时雨果不喜欢它并且可能无法产生你期望的内容)。有两种好方法可以弄清楚为什么我们的构建没有在您的发布文件夹中生成 index.html(public,在您的情况下是默认的 hugo 配置):

  1. 您可以从部署日志页面下载任何成功部署的副本,如我的屏幕截图所示,并查看 "what we ended up with"。这里的典型问题是我们什么都没有(您的构建没有转到 public/ 或者您最终没有 index.html - 所以我们正确地显示了没有路径的 404)

  2. 您可以按照调试说明在本地 运行 我们的构建映像:https://github.com/netlify/build-image#testing-locally。构建完成后,您仍在构建中 shell,可以查看发布目录中的内容。

看来我修好了。 我用示例网站创建了一个新的回购协议,并开始用我的部分替换示例网站的部分内容,看看它何时会崩溃。

因此必须排除 config.toml 的这一部分才能使站点再次正常部署:

[permalinks]
    post = "/:year/:month/:day/:slug/" 

我不确定为什么 - 它一直在那里,当我在本地构建我的网站时它可以工作,但是一旦我将 public 文件夹添加到 .gitignore 并且让雨果建立我的网站。

知道这是为什么吗?

如果您使用的是 Angular 8,则需要通过从 angular.json build outputPath 中读取来提供发布目录值,即 dist/{project-name} 如果您正在使用旧版本,它应该是 dist ,这是你可以从 .angular-cli.json.

读取的 outDir 的值

遇到了这个问题。我的解决方案是在 netlify.toml 文件中将正确的构建路径设置为 publish 声明。新的 netlify 自动部署过程使用此文件从存储库部署项目。

Angular 8 和现在 Angular 9 在 dist/{project name} 中发布,这是要键入的文件夹名称,而不仅仅是像以前版本中那样的 dist。如果您仅指定 dist,它将在错误的目录中查找 index.html,结果将是 "Page not Found".

将您的主 HTML 文件命名为 index.html 而不是任何其他名称。

如果您在直接浏览到特定路径时看到“未找到”错误,例如:https://yourdomain.com/something,这可能会有所帮助(ReactJS):

在您的 public 文件夹(包含 index.html 的文件夹)中创建一个名为 _redirects 的文件,不带扩展名。然后,在其中键入以下内容:

/* /index.html 200

现在保存、提交、推送和发布。 :)

“未找到”的原因是,当使用路由器时,例如:React Router 它会处理所有路由,但是当您直接转到端点时,netlify 必须知道将您重定向到哪里。这就是我们在 _redirects 文件中指定的内容。

对于 Angular,我遇到了这个问题,我发现以下方法有效:

touch src/_redirects

This file will contain the rule below. It indicates that all requests to the server should be redirected to index.html. We also add a HTTP status code option at the end to indicate that these redirects should return a 200 status. By default, a 301 status is returned.

/*  /index.html 200

The last thing we have to do is add the below option in our angular.json und er projects > {your_project_name} > architect > options > assets. Include it in the assets array:

{
  "glob": "_redirects",
  "input": "src",
  "output": "/"
}

来自https://www.smashingmagazine.com/2020/10/angular-feedback-netlify-forms-edge/

我确保 'publish directory' 和构建文件夹的名称相同。然后我推送了上面@Adwaith 建议的更改。非常感谢@Adwaith,您的输入是救命恩人。

在我的例子中,我有(vue3 应用程序)上传整个构建目录 (dist/) 而不仅仅是文件。这对我有用

title: 'Tezster Dart',
  tagline: 'A flutter package which provides the functionalities to play around with tezos dApps',
  url: 'https://site-name.netlify.app',
  baseUrl: '/',
  onBrokenLinks: 'throw',
  onBrokenMarkdownLinks: 'warn',
  favicon: 'img/favicon.ico',
  organizationName: 'Tezsure', // Usually your GitHub org/user name.
  projectName: 'Tezster_dart', // Usually your repo name.

如果您尚未在 docs/docusaurus.config.js 中更新 url,那可能会出现问题。 通过添加 url: 'https://site-name.netlify.app', 修复它并确保它不以 / 结尾。在我的例子中它没有工作,因为最后 /

在根目录中创建index.html并使用以下代码指向public文件夹中的索引文件

<meta http-equiv="Refresh" content="2; url=public/index.html" />

我能想到的唯一两个原因是:

  1. .html 文件未命名为 index,您的 HTML 文件应该始终是 index.html,至少是 main/home 页面(如果您的项目是多个网页)。

  2. 确保您没有将每个文件都放在单独的目录中,我以前见过这种情况,它会导致问题。