如何在nuxt.js中从网址中删除斜杠?

问题描述 投票:3回答:1

我正在寻找一种方法来重定向我的所有URL,以使它们的结尾都没有斜杠。我已经尝试过使用https://www.npmjs.com/package/@nuxtjs/redirect-module,但无法正确重定向。

redirect: [
    {
      from: '\/$',
      to: (from, req) => req.url.replace(/\/$/, '')
    }
  ],

例如,更改这样的网址http://localhost:8080/item/test-slug/该模块将我重定向到http://localhost:8080/item/test-slug/item/test-slug

任何见识都将受到欢迎。谢谢!

nuxt.js
1个回答
0
投票

所以到目前为止,我发现的唯一解决方案并不完美。

使用redirect-module,我在重定向列表的顶部添加了以下内容:

{
  // eslint-disable-next-line
  from: '(?!^\/$|^\/[?].*$)(.*\/[?](.*)$|.*\/$)',
  to: (from, req) => {
    const base = req._parsedUrl.pathname.replace(/\/$/, '');
    const search = req._parsedUrl.search;
    return base + (search != null ? search : '');
  }
},

也在nuxt.config.js]中也添加了斜杠配置。 (See the doc

router: {
  trailingSlash: false
},

注意:

它使用查询参数重定向所有以'/'结尾的URL,但与主页'/' (似乎已通过某种方式处理]不匹配

以下内容将重定向以下内容:

  • ['/blog/''/blog'
  • ['/blog/?a=b''/blog?a=b'
  • ['/blog/foo/''/blog/foo'
  • ['/blog/foo/?a=b''/blog/foo?a=b'
  • '/''/'。 -> 将不起作用
  • '/?a=b''/?a=b'。 -> 将不起作用
  • 我做了测试清单available here


正则表达式的解释

由于我不是Regex专家,但可能并不完美:

'(?!^\/$|^\/[?].*$)(.*\/[?](.*)$|.*\/$)'

它被打碎了两段:1个排除项和1个包含项。

排除项:(?!^\/$|^\/[?].*$),包括一项检查,以排除带有查询字符串/路由的独立尾随逗号(/?foo=bar)或独立尾随逗号。主要用于主页。

包含:(.*\/[?](.*)$|.*\/$),包括检查试用逗号(/blog/)或带查询字符串的尾随逗号(/blog/?foo=bar

© www.soinside.com 2019 - 2024. All rights reserved.