Next.js Firebase Hosting 404 错误除了 index.html

Posted

技术标签:

【中文标题】Next.js Firebase Hosting 404 错误除了 index.html【英文标题】:Next.js Firebase Hosting 404 error on all except index.html 【发布时间】:2021-05-31 02:01:01 【问题描述】:

我用npm run build && npm run export 构建了一个nextjs 应用程序,并使用firebase deploy 命令部署到了firebase。在此之前,我在我的项目文件夹中使用了firebase init,只使用了默认选项,例如。不是单页应用程序。

然而,当我在 firebase 提供的 url 中访问我的项目后,我看到主页是 index.html,但每当我使用任何其他 slug 时,它都会抛出 404。为什么会这样?我已经包含了我的 firebase.json 文件,以防万一。

firebase.json

  "hosting": 
    "public": "out",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  

【问题讨论】:

【参考方案1】:

根据您的 Firebase 托管规则,您可以提供用户请求的确切文件。

要将其他/所有 URL 重写为您的 index.html,您需要将 rewrite rule 添加到您的 firebase.json。单页应用程序的典型重写规则可能如下所示:

"hosting": 
  // ...

  // Serves index.html for requests to files or directories that do not exist
  "rewrites": [ 
    "source": "**",
    "destination": "/index.html"
   ]

【讨论】:

谢谢你的回答,但这其实不是spa,你知道在nextjs构建多页webapp的情况下应该怎么做吗? 啊,这是对 Cloud Functions 或 Cloud Run 的重写。如果你在我提供的文档链接上向下滚动一点,也有这样的例子。 嘿@MelihAlan 你用这个有什么收获吗? 我做到了,但我意识到我从一开始就做错了!因为 NextJs 是一个 s-s-r 框架,所有路由(页面)都将在服务器中呈现,这就是为什么我上传了一个名为 server.js 的文件,其中包含一个云函数(在 firestore 云函数中运行),它处理所有路由。这解决了问题。我是新手,所以我无法理解您所指的文档,如果这与您的答案相同,请告诉我,以便我接受您的答案。再次感谢。 确实是一样的:您的 server.js 在常规 Cloud Fuctions/Express 应用程序中提供与 index.js 相同的功能。【参考方案2】:

对于希望将静态导出的 Next.js 应用部署到 Firebase 托管的所有人:

您必须像这样在 firebase.json 中的托管配置中添加 "cleanUrls": true :

"hosting": 
    "public": "build",
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
    "cleanUrls": true,
    "rewrites": [
      
        "source": "**",
        "destination": "/index.html"
      
    ]
  ,

如果没有“cleanUrls”配置,用户将不得不导航到 https://example.com/login.html 以便 Next.js 路由到例如登录页面。使用该参数,可以向https://example.com/login 发出网络请求。

【讨论】:

在静态生成/导出的 Next.js 应用程序上为我工作。谢谢!

以上是关于Next.js Firebase Hosting 404 错误除了 index.html的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Hosting不会生成firebase.json

Flutter 现有项目到 WebApp + Firebase (Firestore + Hosting)

html Firebase Hosting Cache&Gulp

我无法访问Firebase Hosting上的快速路线

Flutter Web App Firebase Hosting Setup 完成屏幕外观?

如何将 firebase 的 firestore/admin sdk 与 next.js 一起使用