javascript 重定向所有路由到heroku中托管的nuxt项目中的https

t3irkdon  于 2023-05-05  发布在  Java
关注(0)|答案(3)|浏览(114)

我试图创建一个中间件来重定向我所有的路由到https,我想我需要一个中间件,所以我在Nuxt的中间件文件夹中创建了一个redirect.js文件,然后我将此添加到nuxt.config.js

router: {
  middleware: ["redirect"]
},

下面是我的redirect.js文件,它给了我一个服务器错误:

export default function({ app }) {
  if (process.env.NODE_ENV === "production") {
   if (app.context.req.header("x-forwarded-proto") !== "https") {
  app.context.res.redirect(`https://${app.context.req.header("host")}${app.context.req.url}`);
   }
  }
}
wf82jlnq

wf82jlnq1#

我发现了一个更简单的方法,我已经添加了包重定向-ssl

npm i redirect-ssl

然后我在nuxt.config.js中添加了这一行:

serverMiddleware: ["redirect-ssl"],
ymdaylpp

ymdaylpp2#

你可以在heroku中配置这个。
对于Nuxt静态模式:
1.在buildpacks下的heroku/nodejs buildpack之后添加https://github.com/heroku/heroku-buildpack-static.git buildpack
1.确保将构建包按此顺序添加到项目根目录下的app.json

  • 在项目的根目录中添加static.json
  • 确保roothttps_only设置正确
  • 如果你想让Nuxt代替Nginx解析路由(这样当你转到未知路由时就不会得到Nginx 404页面),也可以设置routes

static.json示例:

{
  "root": "dist/",
  "routes": {
    "/**": "index.html"
  },
  "https_only": true
}
ix0qys7i

ix0qys7i3#

对于nuxt 3(它与heroku一起工作):

import redirectSSL from 'redirect-ssl'
export default defineEventHandler((event) => {
  const protocol = event.node.req.headers['x-forwarded-proto']; // http || https
  const env = process.env.NODE_ENV; // development || production
  if (protocol === 'http' && env === 'production') {
    return redirectSSL(event.node.req, event.node.res)
  }
})

相关问题