TYPO3 10.4 中一个根页面的多域设置?

Posted

技术标签:

【中文标题】TYPO3 10.4 中一个根页面的多域设置?【英文标题】:Multi-domain setup for one root page in TYPO3 10.4? 【发布时间】:2021-01-28 15:47:42 【问题描述】:

我在配置从 TYPO3 9.5 升级到 10.4 的旧站点时遇到问题。在 TYPO3 9.5 中,我使用一个根页面(选项 is_siteroot 设置为 true 的页面)进行了多域设置,并将多个域映射到该根页面,例如域 example.org、example.com 和 example.net 都映射到同一个根页面,因此在前端显示相同的内容但具有不同的 url。我可以通过在新站点模块中将根页面配置为具有域 example.org 的站点,然后在列表模块中向此添加多个域记录(example.org、example.com 和 example.net)来做到这一点根页面。

现在的问题是,升级到 TYPO3 10.4 后,在列表模块中添加域记录的可能性不再可用,因此我无法将多个域映射到同一个根页面。我可以访问在站点模块中配置的域 example.org,但现在我想知道如何配置站点,以便域 example.com 和 example.net 也映射到同一个根页面。

我目前看到的唯一可能性是克隆整个页面树,然后将其他域映射到单独的根页面。但这里的问题是,所有内容都必须在所有三个页面树中维护,这对我来说不是一个可行的解决方案,因为所有三个域显示的内容应该始终相同。

是否可以通过某种方式进行配置,以便域映射再次按上述方式工作?

提前致谢。

【问题讨论】:

您是否尝试在站点配置中将其他站点设置为 baseVariants? 这种方法对我不起作用,因为在将其他域设置为 baseVariants 时,它们只会被重定向到基本域。 【参考方案1】:

一个选项是调整您的 .htaccess 文件以设置合适的环境变量,以防请求的 HTTP 主机与您预期的主机列表匹配:

# Match any of example.org, example.com or example.net
# With other hosts TYPO3_BASE_HOST will be undefined 
SetEnvIfNoCase HOST ^(example\.(?:org|com|net))$ TYPO3_BASE_HOST=$1

现在您可以在站点配置中将use this environment variable 用作base

base: 'https://%env(TYPO3_BASE_HOST)%/'

但请注意,在多个主机上拥有完全相同的内容会混淆用户并导致糟糕的 SEO 排名,除非您设置了正确的规范参考。

【讨论】:

我喜欢这种方法! :) 这种方法几乎可行,但对我来说并不完全。问题在于 TYPO3 将 baseUrl 缓存在 cache_hash 表中。这会导致以下行为:调用 example.org 按预期工作(创建了带有 baseUrl example.org 的 cache_hash 记录),但调用 example.com 或 example.net 不起作用并导致错误(找不到页面,原因:未找到站点配置。)。清除缓存后(表 cache_hash 的所有记录都被删除)调用 example.com 有效,但 example.org 不再有效(现在创建了带有 baseUrl example.com 的 cache_hash 记录)。 您的主机是否碰巧有 3 种不同的语言?如果是,那么您可以改用 base: / 并改用 3 个主机作为语言库。这些是在计算 cHash 基数时原生包含的。 不,所有域都应具有相同的语言和相同的内容。【参考方案2】:

缓存可能会干扰包含可变部分的基本路径。

我建议定义多个baseVariants。条件不被缓存。

base: 'https://example.org'
baseVariants:
 - base: 'https://example.com'
   condition: 'getenv("HTTP_HOST") == "example.com"' 
 - base: 'https://example.net'
   condition: 'getenv("HTTP_HOST") == "example.net"' 

您可以将它与 Mathias 的想法结合起来,在 .htaccess 中设置一个环境变量并使用它,但实际上不需要。

免责声明:如果在不透明的代理后面,对 HTTP Host 的反应可能需要适应。然而,如今代理修改 Host 是非常不寻常的 - 如果他们这样做,请改用 X-Forwarded-Host

【讨论】:

这种方法对我有用。现在所有三个域 example.org、example.com 和 example.net 都显示相同的内容,但 URL 中的域不同。然而,由于多个域上的重复内容,这会导致糟糕的 SEO 排名。因此,为避免这种情况,您必须正确设置规范 URL。

以上是关于TYPO3 10.4 中一个根页面的多域设置?的主要内容,如果未能解决你的问题,请参考以下文章

TYPO3 10.4 前端未找到新字段

TYPO3 升级(7.6 到 10):未找到站点配置

TYPO3:页面+子页面上的登录表单

TYPO3:在插件中隐藏“插件模式”和“记录存储页面”

如何在站点配置中为相同的根页面 ID 配置多个域?

在typo3中维护hreflang外部页面