TYPO3 9.5 - редиректы с помощью cms-редиректов - PullRequest
0 голосов
/ 01 апреля 2020

Я использую TYPO3 v9.5.15 и хотел бы настроить некоторые автоматические перенаправления. Я хотел бы, чтобы пользователи, имеющие доступ к https://www.example.com/about-us/, были перенаправлены на указанную c внутреннюю страницу.

Веб-сайт должен использовать настроенные языки (французский и немецкий). Вот конфигурация сайта:

base: 'https://www.example.com'
baseVariants:
  -
    base: 'https://local.example.com'
    condition: 'getenv("HTTP_HOST") == "local.example.com"'
  -
    base: 'https://staging.domain.com'
    condition: 'getenv("HTTP_HOST") == "staging.example.com"'
errorHandling:
  -
    errorCode: '404'
    errorHandler: Page
    errorContentSource: 't3://page?uid=157'
languages:
  -
    title: Français
    enabled: true
    base: /fr/
    typo3Language: fr
    locale: fr_CH
    iso-639-1: fr
    navigationTitle: FR
    hreflang: fr-CH
    direction: ltr
    flag: fr
    languageId: '0'
  -
    title: Deutsch
    enabled: true
    base: /de/
    typo3Language: de
    locale: de_CH
    iso-639-1: de
    navigationTitle: DE
    hreflang: de-CH
    direction: ltr
    fallbackType: fallback
    fallbacks: '0'
    flag: de
    languageId: '1'
rootPageId: 84
routes: {  }

А вот настроенное перенаправление:

Configured redirection image

Перенаправление работает только с https://www.example.com/fr/about-us/ или https://www.example.com/de/about-us/ и не без языкового сегмента. Без языкового сегмента я получаю страницу ошибки 404.

При отладке \ TYPO3 \ CMS \ Redirects \ Service \ RedirectService-> matchRedirect () мое регулярное выражение сравнивается с текущим путем URI. Вместо / about-us / путь будет / fr / page-not-found , что означает, что перенаправление уже произошло. И совпадает ошибка, так как мое регулярное выражение:

#^(.*)/about-us/$#

У кого-нибудь есть решение с этим? Заранее спасибо за помощь. С уважением, Жюльен

1 Ответ

0 голосов
/ 06 апреля 2020

Причина, по которой вы получаете 404, состоит в том, что ваше регулярное выражение соответствует страницам с чем-то заполненным в начале, заканчивающимся /about-us/ - в вашем случае языковым сегментом или любой папкой пути.

скажем, вы не настроили перенаправление для "Без языкового сегмента" .

Один способ, добавив второе перенаправление с:

#^/about-us/$#

в качестве регулярного выражения, и используя те же настройки для других настроек, он должен делать то, что вы хотите.

В любом случае, заполнитель (. *) будет опущен, поскольку он соответствует многим. Благодаря большей описательности экономит головной боль и неконтролируемые сопоставления.

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

#^/([a-z0-9-]+)(/|)about-us/$#

или более открытым:

#^/(.*)(/|)about-us/$#

Или, если у вас есть структура пути, лучше ограничиться только известными языковыми сегментами:

#^/(en/|fr/|de/|)about-us/$#
...