TYPO3 7.6:404 错误页面:HTML 包裹在数字中

TYPO3 7.6: 404 error page: HTML wrapped in numbers

我在 TYPO3 网站上创建了自己的“404 页面未找到”错误页面,并通过 /typo3conf/LocalConfiguration.php 如下实现,使用页面的 Speaking URL 路径:

return [
    ...
    'FE' => [
        ...
        'pageNotFound_handling' => '/page-not-found/',
    ]
]

现在,当我调用一个不存在的页面时,会显示错误页面,但在 HTML 源代码之前有一个 4 位字母数字(据我所知是十六进制)和它后面的“0”。示例(大多数重新加载后开始的数字不同)

37b3
<!DOCTYPE html>
...
</html>
0

调用错误页面 URL 本身时,页面会正确返回,但没有这些数字。

激活或停用 RealURL 扩展没有区别。

提前致谢!

我添加了安装工具的完整描述,我想我们可能会在那里找到解决方案。

TYPO3 应如何处理 non-existing/accessible 页面的请求。

  1. 空(默认)

    显示页面树中向上的下一个可见页面。

  2. 'true' 或 '1'

    显示一条错误消息。

  3. 字符串

    要显示的静态 HTML 文件(使用正确的 headers 读取内容和输出),例如notfound.htmlhttp://www.example.org/errors/notfound.html.

  4. 前缀"REDIRECT:"

    如果前缀为"REDIRECT:",它将重定向到前缀后的URL/script。

  5. 前缀"READFILE:"

    如果以"READFILE"作为前缀,那么它期望剩余的字符串是一个HTML文件,在有标记“###CURRENT_URL#之后将被直接读取并输出##" 替换为 REQUEST_URI,###REASON### 替换为原因文本,例如:READFILE:fileadmin/notfound.html.

  6. 前缀"USER_FUNCTION:"

    如果以 "USER_FUNCTION:" 为前缀,则调用用户函数,例如USER_FUNCTION:fileadmin/class.user_notfound.php:user_notFound->pageNotFound 其中文件必须包含一个 class user_notFound,里面有一个方法 pageNotFound(),有两个参数 $param$ref.

您配置的内容:

你正在传递一个字符串,因此 TYPO3 期望找到一个你没有的文件,因为它更像是一个 URL.

从你试图实现的目标来看,我会选择 REDIRECT:/page-not-found/

感谢您顺便指出这一点,我将从核心中删除 string 配置,因为让更多人陷入这个陷阱是没有意义的。

简而言之:更改 LocalConfiguration.php 的 FE 部分中的以下行:

'pageNotFound_handling' => '/your404page.html',

'pageNotFound_handling' => 'REDIRECT:/your404page.html',

原因

实际原因是分块 Content-Encoding 和 TYPO3 在某些情况下无法解码的组合。在您的情况下,未找到页面处理程序最终使用 GeneralUtility::getUrl() 来检索错误页面。

如果您启用了 [SYS][curlUse],它将使用 cUrl 检索页面,没有问题。

如果您没有启用 [SYS][curlUse],它将打开一个套接字,读取 headers,然后读取其余的 body。如果网络服务器使用 "chunked" Content-Encoding,则 body 将包含数据块,每个块都以十六进制格式的行开头。内容以一个空块结尾(当然还有一行长度为“0”)。 cUrl 显然知道如何解码分块数据。

getUrl() 本身并不知道如何处理分块数据,而是按原样使用内容作为页面内容。

在 TYPO3 8 LTS 中,guzzle 库用于处理 HTTP 请求。在 guzzle 代码中,我找不到任何关于处理分块数据的信息。 Guzzle 将检查 cUrl PHP 扩展是否存在并将其用作首选传输。在大多数安装中,cUrl 是存在的,因为它会自动解码分块数据,所以没有任何问题可见。我必须使用已禁用 cUrl 的 PHP 测试 guzzle,以查看问题是否也存在于 v8/master.

Workaround/solution

如果在您的安装中启用了 PHP 扩展 cUrl,您只需在安装工具中设置 [SYS][curlUse]。 404页面内容周围的数字会消失