您可以在 nuxt 中使用 serverMiddleware 完成此操作
为你的中间件创建一个文件:
middleware/server/seoMiddleware.js
在serverMiddleware 块中将其添加到您的nuxt.config.js:
serverMiddleware: [
'~/middleware/server/seoMiddleware.js'
]
创建一个文件来处理您的 301 列表:
middleware/server/301.js
在301.js 中使用正则表达式添加路径映射:
export default [
{ from: '/(#[\w\d]+)\/(#[\w\d]+)\/(#[\w\d]+)', to: 'items', capture: true }
]
打开你的seoMiddleware.js
const redirects = require('./301.js').default
export default function (req, res, next) {
const redirect = redirects.find(redirect => req.url.test(redirect.from))
if (redirect) {
const to = redirect.capture ? applyCapturesToUrl(req.url, redirect) : redirect.to
res.writeHead(301, { Location: to })
res.end()
}
// failover
next()
}
const applyCapturesToUrl(url, redirect) {
const matches = url.match(redirect.from)
return `/${redirect.to}/` + matches.map(match => match.replace('#', '')).join('/')
}
我们在这里使用了一些简单的正则表达式来根据您的 URL 结构创建捕获组,并使用 serverMiddleware 来拦截请求并在找到匹配项时返回 301(永久重定向)。我们使用next() 进行故障转移,如果未找到匹配项,则允许请求通过。我们在重定向对象上使用capture 标志,以便我们知道何时处理捕获组,没有它我们可以进行简单的模式匹配。