我正在寻找一种方法来重定向我的所有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
任何见识都将受到欢迎。谢谢!
所以到目前为止,我发现的唯一解决方案并不完美。
使用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
)