【问题标题】:Issue with realurl, redirect and caching in TYPO3TYPO3 中的 realurl、重定向和缓存问题
【发布时间】:2016-09-18 13:19:16
【问题描述】:

此错误发生在带有 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/ 时,会显示某个国家/地区的页面(不是默认页面,例如国家“法国”)。这意味着,TYPO3 在页面 www.mypage.com/list/france/ 上为页面 www.mypage.com/list/ 创建一个缓存条目,但是对于这个 url,缓存条目不应该被创建,因为重定向.

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

当禁用 realurl(或只是从 realurl 配置中删除参数“country”)时,不会发生此错误。

【问题讨论】:

  • 哪个 TYPO3 版本?
  • 您是否使用了 chash 缓存,您的参数是否包含在 chash 计算中?
  • TYPO3 6.2.15 和 7.6.10
  • 当我禁用 realurl 时,我看到了扩展生成的链接的 cHash 参数。我也不排除“cHashExcludedParameters”中的参数“country”,所以我假设这个参数包含在cHash计算中。
  • 我可以重现此错误:我将页面的缓存时间设置为 1 分钟。然后我等待一分钟,然后加载网址 www.mypage.com/list/france/。现在,打开 www.mypage.com/list/ 时,没有重定向,而是显示法国。

标签: redirect caching typo3 realurl pibase


【解决方案1】:

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

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

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

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

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

  1. 当您访问 www.mypage.com/list/france/ 时,在 Install Tool 中设置 FE - pageNotFoundOnCHashError 并检查是否发生 404 错误

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

  3. 检查由pi_linkTP_keepPIvars_url() 生成的带有和不带有RealURL 的url。是否包含cHash

【讨论】:

  • 一切配置正确:enableCHashCache 为真,1. pageNotFoundOnCHashError 为真,不显示 404 页面,2.不同国家的 cHash 变化,3. url 包含 cHash
  • @Sven 3. url 包含 cHash 是否也启用了 RealURL?
  • 启用 RealURL 后,url 不包含 cHash。 RealURL 剥离 cHash 并将其存储在“original_url”列的“tx_realurl_urlcache”表中。
  • @Sven 好的,看来,这个原因在你的另一个问题中找到,由 RealURL 的作者回答:stackoverflow.com/a/39676203/2070270
  • 是的,你是对的。不计算 cHash 参数,realurl 不为 url www.mypage.com/list/france/ 生成 cHash 参数。
【解决方案2】:

问题描述在这里:realurl generates entries without cHash

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多