使用next.config.js中的Regex以编程方式重定向

lyfkaqu1  于 2022-12-12  发布在  其他
关注(0)|答案(2)|浏览(141)

我的网站正在改变URL结构,我有1000个页面。对于SEO,我想在我的next.config.js文件中设置一个Regex重定向,但官方文档并没有真正帮助我的情况,因为我的页面有以下结构:

/product-name-price/

新的结构将是:

/price/product-name

更新日期:

我已经设法让/product-name-price重定向到/price/product-name-price,并对next.config.js做了以下更改:

async redirects() {
return [
{
source: '/:product',
destination: '/price/:product',
permanent: true,
}
]
}

如何在next.config.js文件中操作:product参数,以排除product-name-price-price部分,从而使最终的url为/price/product-name

9w11ddsr

9w11ddsr1#

我使用中间件解决了这个问题,因为似乎不可能在next.config.js中修改重定向目标的参数。

import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

export function middleware(request: NextRequest) {
  if (request.nextUrl.pathname.endsWith('-price') || request.nextUrl.pathname.endsWith('-price/')) {
    return NextResponse.redirect(new URL(`/price/${request.nextUrl.pathname.split("-price")[0]}`, request.url), 308)
  }
  if (request.nextUrl.pathname.includes('price.php')) {
    return NextResponse.redirect(new URL(`/price/${request.url.split("price.php?brand=")[1].toLowerCase()}`, request.url), 308)
  }
}

第一个条件检查请求路径名是否以-price结尾,然后通过拆分字符串重定向到没有-price的相同路径,状态代码为308。
第二个条件检查请求路径名是否包含price.php,在这种情况下,它还具有查询参数“brand”。它采用此参数的值,并再次通过拆分字符串重定向到/price/product-name结构,其中“product-name”等于“brand”的值。
我已经使用308重定向搜索引擎优化的目的,以表明这是一个永久重定向到谷歌。

k7fdbhmy

k7fdbhmy2#

您可以在next.config中使用RegEx来执行此操作:正则表达式路径匹配
它将是这样的:

module.exports = {
  async redirects() {
    return [
      {
        source: '/:product-name(.*)-:price(\\d)',
        destination: '/:price/:product-name',
        permanent: true,
      },
    ]
  },
}

@user3536141,如果你提供用例及其变体(如果有的话),我可以尝试用一个更准确的例子来帮助你。

相关问题