我在TYPO3网站上创建了自己的“404找不到页面”错误页面,并通过/typo3conf/LocalConfiguration.php使用页面的Speaking URL路径实现如下:
return [
...
'FE' => [
...
'pageNotFound_handling' => '/page-not-found/',
]
]
现在,当我调用一个不存在的页面时,会显示错误页面,但是有一个4位数的字母数字(就我现在所见的十六进制而言)在HTML源代码和“0”之后它。示例(大多数重新加载后开头的数字不同):
37b3
<!DOCTYPE html>
...
</html>
0
当调用错误页面URL本身时,页面将正确返回,而不包含这些数字。
激活或停用RealURL扩展程序没有任何区别。
提前多多感谢!
答案 0 :(得分:1)
我在安装工具中添加了完整的说明,我想我们可能会在那里找到解决方案。
为空(默认)
显示页面树中向下的下一个可见页面。
'true'或'1'
显示错误消息。
<强>字符串强>
要显示的静态HTML文件(使用正确的标题读取内容和输出),例如let supportView: UIView = UIView()
let containerView = UIView()
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
self.containerView.frame = CGRect(x: self.view.frame.size.width - 100, y: 200, width: 225, height: 70)
print(self.containerView.frame.height)
self.containerView.backgroundColor = UIColor.gray
self.containerView.layer.cornerRadius = 20
self.view.addSubview(self.containerView)
let controller = storyboard!.instantiateViewController(withIdentifier: "Storyboard2")
addChildViewController(controller)
containerView.addSubview(controller.view)
controller.didMove(toParentViewController: self)
}
或notfound.html
。
前缀“REDIRECT:”
如果前缀为“REDIRECT:”,它将重定向到前缀后的URL /脚本。
前缀“READFILE:”
如果以“READFILE”作为前缀,那么它将期望剩余的字符串是一个HTML文件,在将标记“### CURRENT_URL ###”替换为REQUEST_URI和### REASON后,将直接读取和输出该文件。带有原因文本的##,例如:http://www.example.org/errors/notfound.html
。
前缀“USER_FUNCTION:”
如果以“USER_FUNCTION:”作为前缀,则调用用户函数,例如READFILE:fileadmin/notfound.html
其中文件必须包含一个类USER_FUNCTION:fileadmin/class.user_notfound.php:user_notFound->pageNotFound
,其中包含方法user_notFound
,其中包含两个参数pageNotFound()
和$param
。
你正在传递一个字符串,因此TYPO3希望找到一个你没有的文件,因为它更像是一个URL。
从你尝试实现的目标开始,我会选择$ref
。
感谢你指出这一点,我将从核心删除REDIRECT:/page-not-found/
配置,因为让更多的人进入这个陷阱是没有意义的。
答案 1 :(得分:1)
简而言之:更改LocalConfiguration.php的FE部分中的以下行:
'pageNotFound_handling' => '/your404page.html',
到
'pageNotFound_handling' => 'REDIRECT:/your404page.html',
答案 2 :(得分:0)
实际原因是分块内容编码和TYPO3在某些情况下无法解码的组合。在您的情况下,页面未找到处理程序最终使用GeneralUtility::getUrl()
来检索错误页面。
如果您启用了[SYS][curlUse]
,则会使用cUrl检索页面,并且没有问题。
如果您没有[SYS][curlUse]
启用它,它将打开一个套接字,读取标题然后读取正文的其余部分。如果网络服务器使用&#34; chunked&#34; Content-Encoding正文将包含数据块,每个块以一个长度为十六进制格式的行开头。内容以空块结束(当然还有一行长度为#34; 0&#34;)。
cUrl显然知道如何解码分块数据。
getUrl()
本身不知道如何处理分块数据并将内容用作页面内容。
在TYPO3 8 LTS中,guzzle库用于处理HTTP请求。在guzzle代码中,我无法找到有关处理分块数据的任何信息。 Guzzle将检查cUrl PHP扩展是否存在并将其用作首选传输。在大多数安装中,存在cUrl,因为这会自动解码分块数据,所以不会出现任何问题。我必须使用禁用cUrl的PHP来测试guzzle以查看问题是否也存在于v8 / master中。
如果您的安装中启用了PHP扩展程序cUrl,则只需在安装工具中设置[SYS][curlUse]
即可。 404页面内容周围的数字将消失。