在 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 错误页面,而不将它们从引发错误的页面重定向的主要内容,如果未能解决你的问题,请参考以下文章