错误的 TYPO3 页面缓存
Wrong TYPO3 Page Cache
这个问题偶尔会出现在访问量很大的页面上。
有时 TYPO3 会显示完全不同页面的内容(包括 HTML head Section)。
例如,如果用户调用以下页面:/products/
(默认控制器 ProductController
和 listAction
)TYPO3 显示随机控制器的内容和同一插件的操作在页面上(例如 ApplicationController
和 showAction
)。
该网站没有重定向到另一个页面,它只是显示了错误的内容!
我已经尝试过以下方法:
- 我在
nonCacheableControllerActions
添加了 Controller + action(问题在一天后再次出现)
- 将
?no_cache=1
添加到URL(问题解决,但页面速度降低)
- 正在清缓存(问题解决,不管清什么缓存。但是隔一天又出现问题)
- 我写了一个脚本,每隔几分钟调用一次页面,这似乎解决了这个问题。
还有其他人遇到同样的问题吗?
规格:
- TYPO3 版本:
7.6.22
- realurl 版本:
2.2.1
尝试将插件定义为 USER_INT。
plugin.tx_yourextkey = USER_INT
这将告诉 TYPO3 为每个请求呈现代码。
最佳做法是为 showAction 设置第二个页面,并且仅在 single_view 页面上,将插件定义为 USER_INT。
但是如果你有两个页面,你应该不会遇到这个问题。不需要 USER_INT 设置。
这些缓存问题通常是由于错误或缺少 cHashes 而发生的。
您可以使用 $GLOBALS['TSFE']→reqCHash();
在你的控制器的动作中。如果没有设置 cHash,这将禁用缓存,因此确保您不会得到不正确的缓存条目。
请注意:如果您在系统设置中设置 [pageNotFoundOnCHashError] = 1,则当在没有 cHash 的情况下调用页面时,您将收到页面未找到错误,如果将其设置为 0,页面仍将显示但不会缓存。
以下信息可能已过时,请参阅下面 moe2k 的回答以获取更多最新信息。
或者,有一个系统参数“[FE][cHashRequiredParameters]”——您可以在那里添加您的插件参数。如果没有给出 cHash 但设置了其中一个参数,则 TYPO3 会触发配置的 cHash 错误行为。
我相信 cHashes 会自动为拼写链接设置,不过您可以试试看。如果它们没有自动设置,您应该在指向 show 操作的链接上设置“useCacheHash = 1”。
我更喜欢并使用第一种变体。
从 TYPO3 v9 开始,使用以下内容:
$TYPO3_CONF_VARS['FE']['cacheHash']['requireCacheHashPresenceParameters']
使用数组作为值而不是
$TYPO3_CONF_VARS['FE']['cacheHash']['cHashRequiredParameters']
以逗号分隔的列表。
这个问题偶尔会出现在访问量很大的页面上。 有时 TYPO3 会显示完全不同页面的内容(包括 HTML head Section)。
例如,如果用户调用以下页面:/products/
(默认控制器 ProductController
和 listAction
)TYPO3 显示随机控制器的内容和同一插件的操作在页面上(例如 ApplicationController
和 showAction
)。
该网站没有重定向到另一个页面,它只是显示了错误的内容!
我已经尝试过以下方法:
- 我在
nonCacheableControllerActions
添加了 Controller + action(问题在一天后再次出现) - 将
?no_cache=1
添加到URL(问题解决,但页面速度降低) - 正在清缓存(问题解决,不管清什么缓存。但是隔一天又出现问题)
- 我写了一个脚本,每隔几分钟调用一次页面,这似乎解决了这个问题。
还有其他人遇到同样的问题吗?
规格:
- TYPO3 版本:
7.6.22
- realurl 版本:
2.2.1
尝试将插件定义为 USER_INT。 plugin.tx_yourextkey = USER_INT
这将告诉 TYPO3 为每个请求呈现代码。
最佳做法是为 showAction 设置第二个页面,并且仅在 single_view 页面上,将插件定义为 USER_INT。
但是如果你有两个页面,你应该不会遇到这个问题。不需要 USER_INT 设置。
这些缓存问题通常是由于错误或缺少 cHashes 而发生的。
您可以使用 $GLOBALS['TSFE']→reqCHash();
在你的控制器的动作中。如果没有设置 cHash,这将禁用缓存,因此确保您不会得到不正确的缓存条目。
请注意:如果您在系统设置中设置 [pageNotFoundOnCHashError] = 1,则当在没有 cHash 的情况下调用页面时,您将收到页面未找到错误,如果将其设置为 0,页面仍将显示但不会缓存。
以下信息可能已过时,请参阅下面 moe2k 的回答以获取更多最新信息。
或者,有一个系统参数“[FE][cHashRequiredParameters]”——您可以在那里添加您的插件参数。如果没有给出 cHash 但设置了其中一个参数,则 TYPO3 会触发配置的 cHash 错误行为。 我相信 cHashes 会自动为拼写链接设置,不过您可以试试看。如果它们没有自动设置,您应该在指向 show 操作的链接上设置“useCacheHash = 1”。
我更喜欢并使用第一种变体。
从 TYPO3 v9 开始,使用以下内容:
$TYPO3_CONF_VARS['FE']['cacheHash']['requireCacheHashPresenceParameters']
使用数组作为值而不是
$TYPO3_CONF_VARS['FE']['cacheHash']['cHashRequiredParameters']
以逗号分隔的列表。