首页 > 解决方案 > TYPO3 9.5 - 使用 cms-redirects 重定向

问题描述

我正在使用 TYPO3 v9.5.15 并想配置一些自动重定向。我希望访问https://www.example.com/about-us/的用户被重定向到特定的内部页面。

网站必须配置语言(法语和德语)。这是站点配置:

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: {  }

这是配置的重定向:

配置的重定向图像

重定向仅适用于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/$#

有人对此有解决方案吗?在此先感谢您的帮助。问候朱利安

标签: regexredirecttypo3

解决方案


你得到一个 404 的原因是,你的正则表达式只匹配在开始时填充内容的页面,/about-us/在你的情况下是语言段或任何路径文件夹。

也就是说,您没有为"Without language segment"配置重定向。

一种方法是添加第二个重定向:

#^/about-us/$#

作为正则表达式,并且对其他设置使用相同的设置,它应该做你想要的。

无论如何,会省略 (.*) 占位符,因为它匹配很多。更具描述性可以节省 headcache 和不受控制的匹配。

否则,您必须创建一个正则表达式,它匹配两种情况,有和没有语言段:

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

或更开放:

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

或者,如果您有路径结构,最好只限于已知的语言段:

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

推荐阅读