TYPO3 中的 realurl、重定向和缓存问题

Issue with realurl, redirect and caching in TYPO3

此错误发生在带有 piBase 扩展名和 realurl 2.0.15 的 TYPO3 7.6.10 中:

在此扩展中,我正在检查 GET 参数,例如一个国家。如果未提供此参数,我将重定向到同一页面,默认国家/地区作为参数:

if(!$this->piVars['country']) {
  $this->piVars['country'] = 'germany';
  \TYPO3\CMS\Core\Utility\HttpUtility::redirect($this->pi_linkTP_keepPIvars_url(array(), true), \TYPO3\CMS\Core\Utility\HttpUtility::HTTP_STATUS_303);
}

也就是说,访问者例如调用 url www.mypage.com/list/ 并重定向到 www.mypage.com/list/germany/

这工作正常,但一段时间后,一些访问者访问了该页面,重定向停止工作。在浏览器中打开 www.mypage.com/list/ 时,会显示某个国家/地区的页面(不是默认国家/地区,例如国家/地区 "france")。这意味着,TYPO3 在页面 www.mypage.com/list/france/ 上创建了页面 www.mypage.com/list/ 的缓存条目,但是对于此 url,缓存由于重定向,条目应该永远不会被创建。

我可以通过将页面的缓存时间设置为 1 分钟来重现此错误。然后我等一分钟,然后加载 url www.mypage.com/list/france/。现在,当打开 www.mypage.com/list/ 时,没有重定向并且显示法国。

禁用 realurl(或仅从 realurl 配置中删除参数 "country")时,不会发生此错误。

TYPO3 在缓存中存储了所谓的 "versions" 页面,其中包含相应的 cHash 以及没有 cHash 的版本 - 类似于 "default" 页面。

如果发生错误,当核心验证 cHash 时,它会被拒绝并生成页面,使用 url 中提供的参数。

如果第一次命中(缓存为空)并生成错误的 cHash 页面,使用来自 URL 的参数,但由于错误的 cHash,此版本随后被理解为 "default" 并存储在缓存中。

您需要在代码中找到真正的原因。它可能是 RealURL 配置和代码的错误组合。 例如。 enableCHashCache 在 RealURL 配置中设置为 false,但 link 提供 w/out cHash.

我不能告诉你确切的原因,但你可以通过不同的方式检查:

  1. 在Install Tool中设置FE - pageNotFoundOnCHashError,查看是否出现404错误,访问www.mypage.com/list/france/

  2. 禁用 RealURL 并访问具有不同 country 值的页面的不同版本 - cHash 是针对不同的国家发生变化还是保持不变?

  3. 检查由 pi_linkTP_keepPIvars_url() 生成的 url,有无 RealURL。是否包含cHash?

问题描述如下:realurl generates entries without cHash

从2.0.15版本开始,realurl不计算链接的cHash参数,直接访问需要cHash参数来显示正确的缓存内容,如记录的详细页面。