【问题标题】:nextjs with custom express server not redirecting url's on production带有自定义快递服务器的 nextjs 不会在生产中重定向 url
【发布时间】:2020-12-06 12:17:27
【问题描述】:

我在 Vercel 上托管了一个 NextJS 项目 我添加了 server.js 文件以使用自定义快速服务器,该服务器将 301 重定向一些 url 当我在本地运行它时,重定向工作,但是当我将代码推送到 Vercel 上的生产时,重定向不起作用

这是 server.js 文件:

const express = require('express')
const next = require('next')
const bodyParser = require('body-parser')

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
    const server = express()
    server.use(bodyParser.json())

    //Redirect to main page
    server.get(
        [
            '/product-tag/885-m2/?orderby=menu_order',
            '/product-tag/885-m2/?orderby=price',
            '/cutter/mwhzt-zvvit/mwhzt-zvvit-2.html?___store=default&___from_store=english',
            '/sales/guest/form/'
        ]
        , (req, res) => {
            res.redirect(301, '/')
        })

    server.get('*', (req, res) => {
        return handle(req, res)
    })

    server.listen(3000, (err) => {
        if (err) throw err
        console.log('> Read on http://localhost:3000')
    })
})

这是我的 package.json 脚本部分:

  "scripts": {
    "dev": "node --inspect server.js",
    "build": "next build",
    "start": "NODE_ENV=production node server.js",
  },

【问题讨论】:

    标签: node.js reactjs express next.js vercel


    【解决方案1】:

    网址通常不包含查询参数,即“?”之后的部分在请求中。试试这个吧。

        server.get('*', (req, res) => {
            const redirectUrls = [
                '/product-tag/885-m2/?orderby=menu_order',
                '/product-tag/885-m2/?orderby=price',
                '/cutter/mwhzt-zvvit/mwhzt-zvvit-2.html?___store=default&___from_store=english',
                '/sales/guest/form/'
            ]; 
            if (redirectUrls.includes(req.url)) {
              res.redirect(301, '/');
            }
            next();
        })
    

    还要确保你把它写在上面

    server.get('*', (req, res) => {
      return handle(req, res)
    })
    

    否则,代码将永远无法运行。

    【讨论】:

    • 我可以试试你的解决方案,谢谢,但我认为这不是问题,因为例如当我在本地运行网站时,重定向工作从“localhost:3000/sales/guest/form”到“localhost:3000” .但是在我将代码推送到 nextjs Vercel 后它在生产中不起作用
    • 我试过你的代码,redirect 在生产环境中不起作用
    猜你喜欢
    • 2022-10-07
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2019-07-03
    • 1970-01-01
    • 2012-05-06
    • 2023-01-27
    相关资源
    最近更新 更多