此问题基于this previous one
出于SEO的原因,我希望所有URL都以斜杠结尾。到目前为止,我已经将此功能与nuxt-redirect-module
一起使用redirect: [
{
from: '^.*(?<!\/)$',
to: (from, req) => req.url + '/'
}
]
这将检查URL,并在末尾添加一个/
。问题在于网址的末尾有参数。
现在,此重定向
https://example.com/folder
至
https://example.com/folder/
(预期行为)
但是具有参数,现在它的工作方式如下:
https://example.com/folder?param=true
至
https://example.com/folder?param=true/
(将/
添加到参数之后)
问题
这将是实现该目标的方法,因此它将重定向为
https://example.com/folder?param=true
至
https://example.com/folder/?param=true
(因此它将在网址末尾添加/
,但在参数之前)
谢谢!
答案 0 :(得分:2)
redirect: [
{
from: '^[\\w\\.\\/]*(?<!\\/)(\\?.*\\=.*)*$',
to: (from, req) => {
const matches = req.url.match(/^.*(\?.*)$/)
if (matches.length > 1) {
return matches[0].replace(matches[1], '') + '/' + matches[1]
}
return matches[0]
}
}
]
在此处检查第一个正则表达式:https://regex101.com/r/slHR3L/1
感谢@Seybsen的最终提示:)
答案 1 :(得分:1)
以下内容可能更简单,并且据我所知可以做到:
redirect: [
{
from: '^(\\/[^\\?]*[^\\/])(\\?.*)?$',
to: '$1/$2',
},
],
答案 2 :(得分:0)
我是这样写的。此代码捕获所有未签名的网址?和 / 在行尾。我觉得够了
redirect: [
{
from: '^(?!.*\\?).*(?<!\\/)$',
to: (from, req) => {
return req.url + '/';
}
}
],