Условные перенаправления в NextJS

Контекст: у меня есть блог с большим количеством контента, проиндексированного Google. Например, весь контент индексируется как www.site.com/post1 . Я переношу свой блог на NextJS, и я разместил сообщения в блоге на www.site.com/blog/post1 . Я смог легко использовать перенаправления с 301 для поддержки SEO для этих сообщений в блоге. Однако я с проблемой, когда ссылки типа столкнулсяwww.site.com/sitemap.xml также перенаправляются на www.site.com/blog/sitemap.xml . Есть ли способ перенаправить, только если шаблон не соответствует какому-то пути? Вот мой раздел о перенаправлениях в next.config.js

      async redirects() {
    return [
      {
        source: '/:slug',
        destination: '/blog/:slug',
        permanent: true// Matched parameters can be used in the destination
      },
      {
        source: '/sitemap.xml',
        destination: '/sitemap.xml',
        permanent: false// Matched parameters can be used in the destination
      }
    ]
  }

1 ответ

Я бы подумал, что порядок имеет значение, пробовали ли вы сначала поставить правило карты сайта?

      async redirects() {
    return [
      {
        source: '/sitemap.xml',
        destination: '/sitemap.xml',
        permanent: false// Matched parameters can be used in the destination
      },
      {
        source: '/:slug',
        destination: '/blog/:slug',
        permanent: true// Matched parameters can be used in the destination
      }
    ]
  }

В противном случае может потребоваться использовать регулярное выражение

      async redirects() {
    return [
      {
        source: `/:slug(^((?!sitemap\.xml).)*$)`,
        destination: '/blog/:slug',
        permanent: true// Matched parameters can be used in the destination
      },
      {
        source: '/sitemap.xml',
        destination: '/sitemap.xml',
        permanent: false// Matched parameters can be used in the destination
      }
    ]
  }
Другие вопросы по тегам