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

Redirect TYPO3中的realurl、重定向和缓存问题,redirect,caching,typo3,realurl,pibase,Redirect,Caching,Typo3,Realurl,Pibase,此错误发生在TYPO3 7.6.10中,带有piBase扩展名和realurl 2.0.15: 在这个扩展中,我正在检查GET参数,例如国家。如果未提供此参数,我将重定向到同一页面,并将默认国家/地区作为参数: if(!$this->piVars['country']) { $this->piVars['country'] = 'germany'; \TYPO3\CMS\Core\Utility\HttpUtility::redirect($this->pi_linkT

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

在这个扩展中,我正在检查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/时,会显示某个国家/地区的页面(而不是默认国家/地区,例如“法国”)。这意味着,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在缓存中存储具有相应的cHash的页面的所谓“版本”,以及不具有cHash的版本(类似于“默认”页面)

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

在第一次命中(缓存为空)的情况下,使用URL中的参数生成错误的裂缝页面,但由于错误的裂缝,该版本将被理解为“默认”并存储在缓存中

您需要在代码中找到的真正原因。它可能是RealURL配置和代码的错误组合。 例如,在RealURL配置中设置为
false
,但提供了带/不带裂缝的链接

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

  • 当您访问www.mypage.com/list/france时,在安装工具上设置
    FE-pageNotFoundOnCHashError
    ,并检查是否发生404错误/

  • 禁用RealURL并使用不同的
    国家/地区
    值访问页面的不同版本-不同国家/地区的
    差异
    是否会改变

  • 检查由
    pi\u linkTP\u keepPIvars\u url()。它是否包含
    cHash


  • TYPO3在缓存中存储具有相应的cHash的页面的所谓“版本”,另外还存储没有cHash的版本,这是一种“默认”页面

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

    在第一次命中(缓存为空)的情况下,使用URL中的参数生成错误的裂缝页面,但由于错误的裂缝,该版本将被理解为“默认”并存储在缓存中

    您需要在代码中找到的真正原因。它可能是RealURL配置和代码的错误组合。 例如,在RealURL配置中设置为
    false
    ,但提供了带/不带裂缝的链接

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

  • 当您访问www.mypage.com/list/france时,在安装工具上设置
    FE-pageNotFoundOnCHashError
    ,并检查是否发生404错误/

  • 禁用RealURL并使用不同的
    国家/地区
    值访问页面的不同版本-不同国家/地区的
    差异
    是否会改变

  • 检查由
    pi\u linkTP\u keepPIvars\u url()。它是否包含
    cHash


  • 此处描述了该问题:


    自版本2.0.15以来,realurl不计算链接的cHash参数,这些链接可以直接访问,并且需要一个cHash参数来显示正确的缓存内容,如记录的详细页。

    这里描述了问题:



    从版本2.0.15开始,realurl不计算链接的cHash参数,这些链接是直接访问的,需要一个cHash参数来显示正确的缓存内容,类似于记录的详细页。

    哪个TYPO3版本?您是否使用chash缓存,以及您的参数是否包含在chash计算中?TYPO3 6.2.15和7.6.10当我禁用realurl时,我看到扩展生成的链接的chash参数。我也没有在“cHashExcludedParameters”中排除参数“country”,所以我假设这个参数包含在cHash计算中。我可以重现这个错误:我将页面的缓存时间设置为1分钟。然后我等待一分钟,然后加载url www.mypage.com/list/france/。现在,当打开www.mypage.com/list/时,没有重定向,显示france。哪个TYPO3版本?您使用的是chash缓存,chash计算中是否包含您的参数?TYPO3 6.2.15和7.6.10当我禁用realurl时,我看到扩展生成的链接的chash参数。我也没有在“cHashExcludedParameters”中排除参数“country”,所以我假设这个参数包含在cHash计算中。我可以重现这个错误:我将页面的缓存时间设置为1分钟。然后我等待一分钟,然后加载url www.mypage.com/list/france/。现在,当打开www.mypage.com/list/时,没有重定向,显示france。所有配置都正确:enableCHashCache为true,1。pageNotFoundOnCHashError为true,不显示404页,2。不同国家的鸿沟变化,3。url包含cHash@Sven3.启用RealURL时url也包含cHash?启用RealURL时,url不包含cHash。RealURL剥离裂缝并将其存储在“原始url”列的表“tx_RealURL_urlcache”中。@Sven好的,看起来,这个原因在您的另一个问题中找到,答案是