2017-01-02 82 views
0

我在TYPO3网站上创建了自己的“404 Page not found”错误页面,并通过/typo3conf/LocalConfiguration.php使用页面的Speaking URL路径:TYPO3 7.6:404错误页面:HTML包装在数字中

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

现在,当我把一个不存在的页面,错误页面被显示,但有一个4位数字号码(十六进制据现在我已经看到)的HTML源代码之前和一个“0”后。例如(大部分重装后在一开始的数量是不同的)

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

当调用错误页的URL本身是正确返回的页面没有这些数字。

激活或取消激活RealURL扩展并没有什么区别。

非常感谢!

回答

1

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

TYPO3如何处理对不存在/可访问页面的请求。

  1. 空(默认)

    下一个可见的页面向上在页面树所示。

  2. 'true' 或 '1'

    错误信息被示出。

  3. 字符串

    静态的HTML文件来显示(读出内容,并输出与正确的头),例如notfound.htmlhttp://www.example.org/errors/notfound.html

  4. 前缀 “重定向:”

    如果用 “重定向:” 前缀会重定向到前缀后的URL /脚本。

  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其中文件必须包含类user_notFound与方法pageNotFound()里面有两个参数$param$ref

您配置什么:

你传递一个字符串,从而TYPO3希望找到一个文件 - 你没有,因为它更像一个URL。

从你试图实现我会去与REDIRECT:/page-not-found/

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

+0

我编辑了原始问题中的代码。请注意,大多数时间开始时的数字是37b3--但并非总是如此。但它一直是4位数字/字符长。谢谢! –

+0

好的。/page-not-found /路径是服务器上的物理路径,还是你想让TYPO3启动该路径? –

+0

这是在TYPO3中创建的页面。如上所述:我尝试了使用RealURL和没有RealURL,并且我也直接调用了该页面。我打电话给一个不存在的页面时出现这个错误 - [www.digs-bb.de/foo/bar/](http://www.digs-bb.de/foo/bar/) - 但页面看起来很好当我直接打电话时:[www.digs-bb.de/page-not-found/](http://www.digs-bb.de/page-not-found/) –

0

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

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

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

欢迎来到[so]。请详细说明**为什么**需要这样做,因为未来的读者可能无法理解您的答案。 – Fairy

+0

_why_在上面我提到的长答案中解释。 – Jan

0

原因

的真正原因是分块内容的组合编码和TYPO3在某些情况下无法解码。在你的情况下,页面未找到处理程序最终使用GeneralUtility::getUrl()来检索错误页面。

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

如果您没有启用[SYS][curlUse],它将打开一个套接字,读取标题,然后阅读正文的其余部分。如果Web服务器使用“分块”Content-Encoding,则主体将包含数据块,并且每个块以长度为十六进制格式的行开始。内容以空块结尾(当然是长度为“0”的行)。 cUrl显然知道如何解码分块数据。

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

在TYPO3 8 LTS中,使用了guzzle库来处理HTTP请求。在guzzle代码中,我找不到任何有关处理分块数据的内容。 Guzzle将检查cUrl PHP扩展是否存在并将其用作首选传输。在大多数安装中存在cUrl,并且由于这自动解码分块数据,因此不会看到问题。我必须使用禁用了cUrl的PHP来测试guzzle,以确定问题是否也存在于v8/master中。

解决方法/解决方案

如果PHP扩展卷曲在安装启用,你可以简单地在安装工具设置[SYS][curlUse]。围绕404页面内容的数字将消失。

+0

感谢您的支持!它的工作原理...但并不像我预期的那样:即使没有明确指出'REDIRECT:/ page-not-found /',页面未找到/ “ –