Проблема маршрутизации Гэтсби для 404 страниц с языковыми ключами - PullRequest
1 голос
/ 11 ноября 2019

Я строю блог с поддержкой нескольких языков. URL содержат языковые ключи, например /en/blog. Я столкнулся с проблемой с локализацией 404 страниц. То, что описано здесь https://www.gatsbyjs.org/docs/creating-prefixed-404-pages-for-different-languages/, хорошо работает для всех маршрутов, кроме домашней страницы. Домашняя страница имеет следующий URL www.test.com/en, и заканчивается 404 страницей из-за этого регулярного выражения /^\/[a-z]{2}\/404\/$/ Я попытался передать регулярное выражение ^\/?[a-z]{2}\/.+ для соответствия всем маршрутам, кроме /en, кроме matchPathне похоже, кроме регулярных выражений.

Страницы ранжируются под капотом;однако, похоже, что к /en и /en/does-not-exist относятся одинаково, или последний имеет приоритет над первым.

Интересно, сталкивался ли кто-то с этой проблемой раньше и, возможно, был ли обходной путь.

На данный момент у меня есть общий 404, а также отдельные 404 страницы для всех доступных языков. В универсальном 404 я хочу перенаправить к языковой версии 404. Это добавляет сложности, которую я хотел бы избежать.

Любая помощь приветствуется. Спасибо!

1 Ответ

0 голосов
/ 12 ноября 2019

Оказывается, это известная проблема everything in match-paths.json. https://github.com/gatsbyjs/gatsby/issues/19228

На данный момент мой обходной путь использует перенаправления на основе языкового ключа.

У меня есть страница по умолчанию 404 и страница 404 для конкретного языка, например /en/404. Внутри страницы 404 по умолчанию я просто перенаправляю ложь так:

import { useEffect } from 'react';
import { navigate } from 'gatsby'

// Assuming the urls are structured this way /en/blog/does-not-exist
const getLanguage = (location) => location.pathname.split('/')[1]

const NotFoundPage = ({ location }) => {
  useEffect(() => {
    navigate(`/${getLanguage(location)}/404`, { replace: false })
  }, []);

  return null
}

export default NotFoundPage

Не лучшее решение, но пока оно работает. Выложу обновление, как только у меня будет лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...