页面在初始页面加载时工作,但如果我刷新页面,我会收到 Zeit、Nextjs 和 now 的 404 错误

Jam*_*ber 5 javascript reactjs serverless-framework next.js vercel

我最近从 升级now v1v2.

一切都在本地运行,now dev并且所有页面都重新加载,没有任何问题。但是,当我推送到产品并now --prod导航到页面时,一切都会按预期工作,但是如果我重新加载页面,我将进入错误页面,错误为404

我必须承认,自从迁移到v2. 我确信它与我的路由有关...但我一直认为它直接从我的文件夹结构中获取路由?

更令人困惑的是,如果您重新加载,您将收到 404,但是从该 404 错误页面来看,如果您使用导航,则该网站将毫无问题地呈现。

根据文档,它应该从文件系统中获取名称,我相信它确实如此,因为它最初导航到那里。

默认情况下,路由由部署的文件系统定义。例如,如果用户向 /123.png 发出请求,并且您的 now.json 文件不包含任何具有与该路径匹配的有效 src 的路由,则它将回退到文件系统并提供 /123.png(如果存在)。

now.json

{
  "version": 2,
  "builds": [
    { "src": "next.config.js", "use": "@now/next" }
  ],
}
Run Code Online (Sandbox Code Playgroud)

文件夹结构

在此输入图像描述

下一个.config.json

const webpack = require('webpack')
const withCSS = require('@zeit/next-css')

module.exports = withCSS({
  webpack: (config, {}) => {
    const originalEntry = config.entry

    config.entry = async () => {
      const entries = await originalEntry()

      if (entries['main.js'] && !entries['main.js'].includes('./polyfills.js')) {
        entries['main.js'].unshift('./polyfills.js')
      }

      return entries
    }
    return config
  },
  env: {
    env: process.env.NODE_ENV,
  },
})
Run Code Online (Sandbox Code Playgroud)

但是,是的,我被困住了,并且将永远感激您的帮助:)

包.json

我不确定这是否有助于了解问题,但这是我的脚本。

  "scripts": {
    "build": "next build",
    "dev:inspect": "NODE_ENV=development nodemon --inspect server.js",
    "start": "now dev",
    "test": "echo \"Error: no test specified\" && exit 0",
    "lint-scripts": "eslint './{Frontend/**,test/**,config/**,.}/*.js'",
    "lint-styles": "stylelint './Frontend/**/*.css'",
    "eslint": "eslint . --fix",
    "lint": "npm run lint-scripts && npm run lint-styles",
    "commit": "npx git-cz"
  },
Run Code Online (Sandbox Code Playgroud)

[编辑]

  "routes": [
    {"src": "/index", "dest": "/" },
    {"src": "/charts", "dest": "/charts" }
  ]
Run Code Online (Sandbox Code Playgroud)

小智 3

制作 vercel.json 并粘贴重定向规则代码。将文件保存在根目录中,然后重新部署。

{
  "routes": [{ "src": "/[^.]+", "dest": "/", "status": 200 }]
}
Run Code Online (Sandbox Code Playgroud)