在 cPanel 中创建自定义 PHP 错误页面,而不将它们从引发错误的页面重定向

Posted

技术标签:

【中文标题】在 cPanel 中创建自定义 PHP 错误页面,而不将它们从引发错误的页面重定向【英文标题】:Create custom PHP error pages in cPanel without redirecting them away from the page that has thrown the error 【发布时间】:2015-12-12 12:45:11 【问题描述】:

我正在尝试让我的网络服务器自定义错误文档/页面,但带有 php 代码包含在其中,而不会将它们从引发错误的页面重定向。

假设我们正在导航到http://website.com/pages/1,它会抛出错误 500,默认该页面将只是一个带有文本“Error 500 (Internal Server Error)" 看起来像:

从上面可以看出,它并没有从引发错误的页面重定向。我希望这个页面看起来是“网站的一部分”,但其中包含 PHP 内容。

我无法通过编辑您在下面看到的页面在 cPanel 中的错误页面中包含 PHP 内容:

如果我要编辑上面的错误 500 页面,下面的问题将是 http://website.com/pages/1 将重定向到 http://website.com/500.shtml 然后依次重定向到 http://website.com/500.php

我确实希望它重定向,否则这意味着刷新页面本质上只会刷新 500.php 页面而不是刷新/pages/1

<script language="javascript">
    window.location.href = "http://www.website.com/500.php"
</script>
<meta http-equiv="refresh" content="0;URL='http://website.com/500.php'" />  

同样会存在同样的问题,只是没有 2 个链重定向,而是使用 .htaccess 文件中的以下内容进行 1 个重定向

ErrorDocument 400 http://website.com/400.php
ErrorDocument 401 http://website.com/401.php
ErrorDocument 403 http://website.com/403.php
ErrorDocument 404 http://website.com/404.php
ErrorDocument 500 http://website.com/500.php

当前结果:重定向到 /500.php

预期结果:在http://website.com/pages/1 中/上显示 500.php 而没有重定向

我怎样才能拥有包含 php 内容的自定义错误页面,而不使其从引发错误的页面重定向?

有没有办法通过 root 来做(我可以让我的主机做点什么,如果可以的话怎么办?)

【问题讨论】:

@Kuya 您甚至打算如何为内部服务器错误使用错误处理程序,如果发生内部服务器错误,错误处理程序甚至并不总是被正确调用。我已经说过了,但我再说一遍,生成一个完整的页面而不是简单地使用 htaccess 是愚蠢的 @Kuya 您不会从帖子中挑选一些内容并回答这些部分,而是回答以粗体显示并在其末尾带有问号的问题:如何我可以在不使其重定向到引发错误的页面的情况下使用带有 php 内容的自定义错误页面吗?。我的帖子很清楚关于重定向和防止重定向 【参考方案1】:

正如其他人回答的那样,这应该可行:

ErrorDocument 500 /500.php

如果您没有指定完整的 URL,它只会显示页面(内部重定向),如果您指定了完整的 URL,那么它会向客户端发出重定向。这是 Apache 在这里描述的:http://httpd.apache.org/docs/2.4/mod/core.html#errordocument

请注意,当您指定指向远程的 ErrorDocument URL(即前面带有 http 等方法的任何内容)、Apache HTTP 服务器将向客户端发送一个重定向,告诉它去哪里 找到文档,即使文档最终位于同一位置 服务器。

以上对您不起作用的事实意味着以下几件事之一:

    你做错了,即使你声称没有指定完整的 URL。 Cpanel 正在添加完整的 URL(不确定您如何编辑 .htaccess 文件,或者是否通过上述 GUI 完成)。 您的 .htaccess 文件被忽略(可能是因为您在 GUI 中设置值,或者可能是因为 FileInfo 在服务器级别设置,因此无法在 .htaccess 文件中指定(参见此处:http://httpd.apache.org/docs/2.4/custom-error.html),在这种情况下,它必须自己从其他配置中获取完整的 URL。 500.php 脚本自己进行重定向(如果保留日志并查看是否返回一页或两页,开发者工具应该很明显)。 Apache 中有一个错误(我和其他人都不知道)。 魔法

你能看看那些东西吗?

可能还有助于了解您使用的是哪个版本的 Apache?

您是否也尝试过一个简单的 500.html 文件,只是为了看看它是否可以在没有重定向的情况下工作?理论上 500.php 文件也应该没问题,但缩小范围会很有趣(并且还会显示对 500.html 的更改是否被拾取并使用,或者它是否仍指向 500.php,这可能会表明这是从您想象的其他配置中提取的)。

【讨论】:

【参考方案2】:

如果您在 .htaccess 文件中添加类似内容,它应该只显示错误页面而无需重定向。我从来没有像你在错误页面的示例中那样使用绝对路径,所以我不确定它会导致什么样的行为

ErrorDocument 404 /404.php 

【讨论】:

ErrorDocument 500 /500.php 重定向到 website.com/500.php

以上是关于在 cPanel 中创建自定义 PHP 错误页面,而不将它们从引发错误的页面重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中创建自定义错误页面

在 IIS 7 中创建自定义 503 页面

如何在 Django 中创建自定义 403 页面?

在自定义页面中创建自定义路由

PHP中的自定义404错误页面

如何在 OpenCart 中创建自定义的 SEO 友好 URL?