Nuxt.js-使用参数在URL的末尾添加斜杠

时间:2019-05-12 15:26:06

标签: vue.js vuejs2 nuxt.js

此问题基于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 (因此它将在网址末尾添加/,但在参数之前

谢谢!

3 个答案:

答案 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 + '/';
      }
    }
  ],